为什么Android 4.0 / Ice Cream Sandwich分配了这么多堆内存?

我注意到,在我的Galaxy Nexus上,android.content.res.Resources分配了大约11MB.我发现了这一点,因为我正在使用DDMS和“转储HPROF文件”选项对事物进行分析.所以,我花了两个小时试图看看分配是否是由于我的代码或支持的库中的东西.我删除了我的所有数据,一吨课,我所有的图书馆,看不到任何改变.在我的代码中,在活动的onCreate()方法开始之后放置一个断点,表明11MB分配已经存在.

经过彻底的困惑后,我决定连接我的Rooted Nook Color运行的CM7,看看它是为什么报告的初始内存使用完全相同的应用程序.由MAT报告的最糟糕的情况记忆“问题疑问”只有896KB.

ICS是最重的吗?我在这里遗漏了什么吗?据我所知,我的应用程序正常运行,但是堆的使用量表示97%已满,我担心潜在的故障.

如果有帮助,MAT表示消耗所有内存的主要对象是Bitmap,BitmapDrawables和NinePatchDrawables.我不明白这些分配来自哪里.

Pre-Honeycomb(< 3.0),位图在本机堆中分配,并没有出现在Dalvik堆转储中,如Eclipse MAT等所示.此本机分配仍然为应用程序的最大Dalvik堆限制做出贡献,并且仍然导致垃圾收集在接近低内存状态的大部分正确时间运行.这个用法可以用Debug.getNativeHeapAllocatedSize()来测量. 由于Android 3.0(包括ICS),它现在在Dalvik堆的正常字节数组中分配Bitmaps的像素数据.实际效果是Bitmap的更好/简化的垃圾收集行为(因为它们可以以更正统的方式处理),并且能够跟踪Dalvik堆转储中的位图分配. 我不认为特定应用程序的实际内存使用情况在Honeycomb和更新版本之间有显着差异,而这只是一种替代会计实践的问题. Memory Analysis for Android

BitMaps in Android

http://stackoverflow.com/questions/9221013/why-is-android-4-0-ice-cream-sandwich-allocating-so-much-heap-memory

转载注明原文:为什么Android 4.0 / Ice Cream Sandwich分配了这么多堆内存?