解决android app内存使用问题

时间:2012-12-12 06:28:43

标签: android memory memory-leaks ddms

我想知道如何解决Android上我的应用程序的高内存使用问题。我在互联网上搜索,发现DDMS插件对于为我的应用程序进行堆内存转储很有用。然而这一点毫无用处。

应用程序“使用时间轴免费”显示使用了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                           

其他mmap 41 16 32

  Unknown    46352      292    46348                           

    TOTAL    68345    13512    65520    65344    49459     2620

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

感谢。

2 个答案:

答案 0 :(得分:1)

最小化您的Android数据使用量。检查链接:http://engineroots.games4punk.com/minimize-your-android-data-usage/

答案 1 :(得分: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's essay on this subject