【问题标题】:Native memory Vs Java application memory本机内存与 Java 应用程序内存
【发布时间】:2014-01-29 10:20:38
【问题描述】:

我对 Android 中的 Android 应用程序开发/内存管理比较陌生。

我知道 Android 会为每个应用程序分配一定数量的内存。 这是否也包括本机分配的内存?

如果是这样,Android 如何跟踪本地分配的内存..

另一方面,如果本机内存不是此分配内存的一部分,那么我可以在本机中分配的最大限制是多少?

请帮助.... 需要更高分辨率的图像计算。

【问题讨论】:

    标签: java android memory memory-management


    【解决方案1】:

    Android 操作系统允许您的应用程序使用一定数量的内存,该内存必须至少为 16 MB(对于“认证”为与 Android 兼容的设备)。您可以在 Virtual Machine Compatibility 部分下的每个 PDF 中检查每个版本 here 的最小值。

    您的应用可用的内存包括本机和 VM(虚拟机)分配的内存(例如,如果您使用 8MB 的本机内存,则 VM 中只有 8MB 内存可用于您的应用程序 - 考虑到最少16MB)。

    如果您需要使用更多内存,您可以在AndroidManifest.xml 中为您的应用程序打开largeHeap 标志。 Here 是它的文档;它还告诉您如何在运行时向操作系统查询可用内存。

    【讨论】:

    • 感谢您提供的信息...这在一定程度上有所帮助。但请帮助我了解 VM 如何跟踪本机分配的内存。
    • 我不知道 Android 是如何做到的。它可能是一个自定义的alloc 实现,它可能是内核跟踪allocs 和VM 查询内核以获取分配的内存,或者它可能是一些其他机制(比如获取所有应用程序进程使用的总内存)并从中减去虚拟机的内存占用)。您可以深入研究 Android 源代码以找出这一点,但您可能需要一段时间才能找到执行此操作的代码(尽管阅读起来应该很有趣)。
    • 我想添加更多...我现在检查了在本机中分配 500 MB 的 malloc,它没有给我内存不足错误。如果内存被跟踪,怎么可能?
    • 嗯……这有点奇怪。这在很大程度上取决于如何为您使用的特定设备构建 Android。 Afaik,分配本机内存应计入应用程序的内存限制。我正在开发一个图片丰富的应用程序,并且在开始测试它时,分配很多位图确实会导致 OOM 错误。 malloc 在您的本机代码中返回了什么?如果它没有返回null,您是否尝试填充它返回的指针(或至少一个靠近分配内存末尾的元素)?
    • 忘记在上一条评论中添加:我在 Android 2.3 上进行测试,它不会在 VM 堆中存储位图像素数据,并且位图数据大小计入应用程序总内存(即使使用 MAT 调试时不清晰可见)
    猜你喜欢
    • 2015-12-30
    • 2020-10-19
    • 2012-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-15
    • 1970-01-01
    • 2019-06-29
    相关资源
    最近更新 更多