0

我想知道如何解决我的应用在 Android 上的高内存使用问题。我搜索了互联网,发现 DDMS 插件在为我的应用程序获取堆的内存转储方面很有用。然而这已经没有用了。

应用程序“Usage Timelines Free”显示使用了 94 MB 的内存,而 DDMS 堆转储显示总共 8.4 MB,疑似泄漏是资源文件。

当我从 adb (dumpsys meminfo) 生成转储时,我得到:

                     Shared  Private     Heap     Heap     Heap

               Pss    Dirty    Dirty     Size    Alloc     Free

            ------   ------   ------   ------   ------   ------

   Native       20        8       20    54588    39431     1892

   Dalvik     6732     9952     6396    10756    10028      728

   Cursor        0        0        0                           

   Ashmem      184        0      184                           

Other dev    11462     1172    11384                           

 .so mmap     2467     2072     1156                           

.jar mmap        0        0        0                           

.apk mmap       48        0        0                           

.ttf mmap        2        0        0                           

.dex mmap     1037        0        0                           

其他地图 41 16 32

  Unknown    46352      292    46348                           

    TOTAL    68345    13512    65520    65344    49459     2620

我怎么知道这个巨大的内存消耗背后是什么。我的应用程序是一个永久运行的前台监控服务,其中有一些每天访问几次的活动。

谢谢。

4

2 回答 2

1

尽量减少您的安卓数据使用量。检查链接:http ://engineroots.games4punk.com/minimize-your-android-data-usage/

于 2013-05-16T09:46:19.240 回答
0

DDMS 并获得了堆内存转储。它只显示使用了 8.4 MB!

然后,在完成垃圾回收(创建堆转储的净效应)后,您仅使用 8.4MB 的堆空间。

请注意,如果您在 Android 1.x/2.x 上运行此程序,MAT 将不会报告位图占用的空间。始终尝试从 Android 3.0+ 设备或模拟器转储堆。

当我从 adb (dumpsys meminfo) 生成转储时,我得到:

我的猜测是您在 Android 1.x/2.x 设备或模拟器上运行它,并且您有很多位图内存。尝试在 Android 3.0+ 环境中运行堆转储和其他测试。

另外,请记住,adb dumpsys meminfo它不会执行完整的垃圾回收,而转储 HPROF 文件则可以。Android 垃圾收集器经过优化以最小化 CPU 使用率,因此不会尝试执行完整的垃圾收集。因此,在运行时,堆通常会充满垃圾,GC 引擎会根据需要回收这些垃圾。

您可能还希望阅读Dianne Hackborn 关于此主题的文章

于 2012-12-12T12:38:51.013 回答