DDMS报告内存使用不正确?

时间:2016-01-05 15:19:20

标签: java android memory-management ddms

我正在调查我们的一个Android内存泄漏应用程序,我发现了一些让我感到困惑的事情。

DDMS堆监视器报告应用程序正在使用13mb / 20mb堆内存,但直接从设备提取的报告报告该应用程序使用了近700mb!

这是设备的问题吗? DDMS错了吗?我如何找出700mb的内容?

enter image description here enter image description here

1 个答案:

答案 0 :(得分:1)

  

它是系统软件的一部分

第一个屏幕截图是isWinner的输出。第二个屏幕截图看起来像来自adb shell dumpsys meminfo,它不是标准Android的一部分;至少,我无法在Android 6.0上快速找到它。

(将来,当有人问你这"报告"'时,请随意引用实际命令)

  

这是设备的问题吗?

可能不是,虽然这很难说,因为我们不知道设备是什么,应用程序是什么,或者是两张数码相机照片之外的其他东西。

  

DDMS是否错误?

可能不是。 Java代码,无论是在Dalvik还是ART中运行,都有一个堆限制,而且这个代码将远低于700MB。

  

如何找出700mb的内容?

〜600MB将来自本机代码(NDK库),最有可能。

首先,找出您的应用中使用本机代码的内容。这可能是您的代码,也可能来自第三方库(例如Fresco)。您的选择是:

  • 调用(或实现)这些库中的逻辑以限制它们使用的堆空间,或者

  • 摆脱它们,或

  • 看看是否有办法将Valgrind或其他东西连接到NDK代码,以确定这些库在何处以及如何使用如此多的系统RAM