【问题标题】:Why is Android 4.0 / Ice Cream Sandwich allocating so much heap memory?为什么 Android 4.0 / Ice Cream Sandwich 分配这么多堆内存?
【发布时间】:2012-03-02 12:32:54
【问题描述】:

我注意到在我的 Galaxy Nexus 上 android.content.res.Resources 分配了大约 11MB。我在使用 DDMS 和“Dump HPROF file”选项分析事物的过程中发现了这一点。因此,我花了两个小时试图查看分配是否是由于我的代码或支持库中的某些内容。我删除了所有数据、大量课程、所有库,但没有发现任何变化。在我的代码中在活动的onCreate() 方法的开头放置一个断点后,它显示 11MB 分配已经存在。

在彻底困惑之后,我决定连接运行 CM7 的根深蒂固的 Nook Color,以查看它报告的完全相同的应用程序的初始内存使用情况。 MAT 报告的最坏情况内存“问题嫌疑人”只有 896KB。

ICS 是不是头重脚轻?我在这里错过了什么吗?据我所知,我的应用程序运行正常,但堆使用率表明 97% 已满,这让我担心潜在的故障。

如果有帮助,MAT 表明消耗所有内存的主要对象是位图、BitmapDrawablesNinePatchDrawables。我不明白这些分配是从哪里来的。

【问题讨论】:

  • 嗯,也许你可以尝试用最低限度制作一个新应用程序,看看它在那里使用了多少
  • 我试了一下,在某些情况下,在打开硬件加速并链接兼容库的情况下,它的可用堆在 GN 上可能不到 10%。

标签: android memory heap-memory android-4.0-ice-cream-sandwich


【解决方案1】:

Pre-Honeycomb (Debug.getNativeHeapAllocatedSize()来衡量。

从 Android 3.0(包括 ICS)开始,它现在在 Dalvik 堆中以普通字节数组为位图分配像素数据。这样做的实际效果是更好/简化了位图的垃圾收集行为(因为可以以更正统的方式处理它们)以及在 Dalvik 堆转储中跟踪位图分配的能力。

我认为特定应用程序的实际内存使用量在 Honeycomb 之前的版本和最新版本之间没有显着差异,这只是一种替代会计做法的问题。

Memory Analysis for Android

BitMaps in Android

【讨论】:

    猜你喜欢
    • 2012-05-17
    • 1970-01-01
    • 2012-03-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-19
    • 2012-04-01
    • 2012-05-01
    • 1970-01-01
    相关资源
    最近更新 更多