Android中的“未知”(“其他”)内存泄漏?
Android Studio Memory Profiler 按类别报告分配情况。Others
根据 https://developer.android.com/studio/profile/memory-profiler.html:其他:您的应用程序使用的内存,系统不确定如何分类。
如果我们深入挖掘,可以在运行时使用 https://developer.android.com/reference/android/os/Debug.MemoryInfo.html#getMemoryStat(java.lang.String)检索类似的内存占用信息。
它看起来像在Android Studio Memory Profiler中对应于类中。该参数报告为:Others
summary.private-other
Debug.MemoryInfo
public int getSummaryPrivateOther() {
return getTotalPrivateClean()
+ getTotalPrivateDirty()
- getSummaryJavaHeap()
- getSummaryNativeHeap()
- getSummaryCode()
- getSummaryStack()
- getSummaryGraphics();
}
哪种类型的内存分配最终属于该类别?它显然不是Java,Native,Code,Stack和Graphics。
如果我的应用程序(具有非常大的代码库,所以我无法真正确定导致它的某个代码)消耗了大量内存,那么是否有特定的源/模式导致这种消耗?Other
编辑 1我能够部分回答我自己的问题的第一部分:
哪种类型的内存分配最终属于该类别?它显然不是Java,Native,Code,Stack和Graphics。
RAM信息也可以使用以下方式检索,通常如下所示:adb shell dumpsys meminfo <your proc name>
通过实验,我可以看到它最有可能包含在.这就提出了下一个问题:什么是?根据 https://developer.android.com/studio/command-line/dumpsys.html#meminfo:Unknown
Private Other
Unknown
系统无法分类到其他更具体的项目之一的任何 RAM 页。目前,这主要包含本机分配,由于地址空间布局随机化 (ASLR),工具在收集此数据时无法识别这些分配。与Dalvik堆一样,Pss Total for Unknown考虑了与Zygote的共享,而Private Dirty是仅用于您的应用程序的未知RAM。
看起来它仍然是本机分配。可识别的本机分配最终属于类别,但是,由于 ASLR 而数据不再可识别的本机分配似乎最终位于 。Native
Unknown
然而,主要问题仍然存在:
如果我的应用程序(具有非常大的代码库,所以我无法真正确定导致它的某个代码)消耗了大量内存,那么是否有特定的源/模式导致这种消耗?我正在寻找答案,例如挂线,打开光标,Webview等。
Other