EmuLabZip logo EmuLabZip

内存

最后更新 · 在 GitHub 上编辑此页

Memory 工具会显示所选应用的内存去向,并让你对比两个时刻,看看是什么增长了。

快照#

点击 Take snapshot 记录一份明细:

AndroidiOS 模拟器
来源dumpsys meminfo <package>Mac 上的 footprint --json <pid>
总计PSS(按比例分摊的集大小)Footprint,iOS 用它来决定何时终止应用
类别Java 堆、原生堆、代码、堆栈、图形、其他私有内存、系统VM 区域,例如 MALLOC_SMALL、__DATA、CoreAnimation
详情总 RSS、swap,以及对象数量(视图、Activity、binder、WebView…)干净且可回收的内存、区域数量

先拍一份快照,使用应用(打开再关闭某个屏幕几次),然后再拍一份。第二份快照会自动与前一份对比;也可以从 Compared with 菜单中选择任何其他基线。类别按变化大小排序,并带有箭头和符号,因此方向从不只依赖颜色来表达。

如果某个类别在重复操作后持续增长,那就是查找泄漏的好地方。

堆转储#

AndroidiOS 模拟器
按钮Heap dump…Memory graph…
文件.hprof,由 am dumpheap 写出.memgraph,由 leaks --outputGraph 写出
用以下工具打开Android Studio、Eclipse MAT 或 PerfettoXcode(File › Open)、leaks、heap、vmmap
要求可调试的应用(或 eng/userdebug 镜像)无

在 Android 上,转储会写入 /data/local/tmp,复制到你的电脑,并从设备上删除。

EmuLabZip 也可以自己读取转储:Find leaks(或用 Open dump… 打开磁盘上的文件)会列出已销毁但仍然存活的 Activity 和已移除的 Fragment、保持每个对象存活的路径,以及保持最多内存存活的对象。请参阅查找泄漏。

通过命令行#

emulabzip mem com.example.app
emulabzip mem com.example.app --json
emulabzip heapdump com.example.app -o before-login.hprof
emulabzip heapdump com.example.app --analyze
emulabzip heap analyze before-login.hprof