我们为一个简单的项目开发了NDK原型。代码在设备和模拟器中编译和工作。然而,当查看手机上的设置菜单时:(三星Galaxy Nexus(Android 4.2.2),三星Gio(Android 2.3.6)),在Gio上运行应用程序比运行应用程序时占用更多空间Galaxy Nexus。此外,以下命令报告GIO的堆分配要高得多:
System.out.println(Debug.getNativeHeapAllocatedSize() / 1049L);
我们正在使用静态库来实现许多功能。 确切的结果是:
NEXUS:
GIO:
足迹和内存使用量差异的原因是什么?
(测量iOS设备(C ++ lib)上的分配产生的结果与Galaxy Nexus上的结果大致相同)。
答案 0 :(得分:2)
Android 2.x和Android 4之间存在很多差异。 一个例子是如何管理位图内存:
在Android Android 2.2(API级别8)及更低版本,当垃圾时 收集发生,您的应用程序的线程被停止。这导致滞后 这会降低性能。 Android 2.3增加了并发垃圾 集合,这意味着记忆很快就会被回收 不再引用位图。
在Android 2.3.3(API级别10)和 更低,位图的支持像素数据存储在本机存储器中。 它与位图本身是分开的,位图存储在Dalvik中 堆。本机存储器中的像素数据不会以可预测的方式释放 方式,可能导致应用程序短暂超过其 内存限制和崩溃。 截至Android 3.0(API Level 11),像素 数据与关联的位图一起存储在Dalvik堆上。
引自: http://developer.android.com/training/displaying-bitmaps/manage-memory.html