Android Studio 中的内存监视器报告的 RAM 使用情况与设备不同

Memory monitor in Android Studio reports different RAM usage than the device

在调查我正在开发的应用程序中的 RAM 使用情况时,我一直在使用 Android Studio 中的内存监视器工具(可以在 Android Studio 中访问工具>Android>内存监视器)。我注意到内存监视器中报告的我的应用程序的 RAM 使用情况总是远低于从设备查看 RAM 使用情况(可以通过转到设置 > 应用程序 > 运行 访问)。正如您在下面的屏幕截图中看到的,内存监视器报告了大约 18MB 的 RAM 使用情况(如果包括免费 space,则为 23MB),但设备报告的是 43MB。

为什么有区别,而且一个比另一个更准确?

我怀疑内存监控工具正在与 dalvik 虚拟机讨论由 Java 代码进行的堆分配,并且设备管理器正在显示整个进程正在使用的内存。因此,第一个不包括虚拟机本身(或其文本和库)使用的开销或内存,或任何堆外分配(有时本机代码可以分配对 VM 不直接可见的内存)。

请参阅 https://developer.android.com/tools/debugging/debugging-memory.html#ViewingAllocations 并尝试 运行 执行以下命令:

adb shell dumpsys meminfo <package_name>

更精确地细分应用程序的 运行 时间内存使用情况。

我已经测试了 Android Studio 的内存监视器的 Allocated 可以通过编程方式获得:

long allocatedMemory = Runtime.getRuntime().totalMemory() - Runtime.getRuntime().freeMemory();

但这只适用于获取当前应用程序的信息。