下载与配置
MAT下载地址:
Eclipse Memory Analyzer Open Source Project | The Eclipse Foundation
JAVA 11下载地址:
Java Downloads | Oracle
由于最新版的MAT还需要JAVA 11,所以还需要配置JAVA 11的环境。
JAVA 11环境配置:
Java Downloads | Oracle
Java 8 和Java 11都有的情况下,把Java 11放到Java 8前面,这样Java环境才是11。最后Java -version 验证一下。
hprof文件获取与格式转换
Hprof文件获取
点击红色箭头按钮,便可以获取到Hprof文件。
Hprof格式转换
由于从Android studio中保存堆栈信息,由于Android studio的hprof文件格式与mat的格式不兼容,所以需要使用 安卓SDK 中的 hprof-conv.exe工具转换一下。
hprof-conv 工具使用
hprof-conv -z srcFile dstFile
-
-z 命令选项 : 表示排除非 APP 内存的堆 , 如 Zygote 内存等 ;
-
srcFile 参数 : -z 后第一个参数是 源文件 , 即从 Android Studio 中保存的内存快照文件 , memory-20221221T195738.hprof
-
dstFile 参数 : 后面的第二个参数是目标文件 , 即将转换后的结果保存到该文件中 ;
例如: hprof-conv -z /d/工作文档/内存优化/memory-20221221T195738.hprof mat.hprof。memory-20221221T195738.hprof 也就是你从Android studio获取的Hprof文件了。
MAT使用
打开MAT。
遇到的小问题:
https://stackoverflow.com/questions/66092895/eclipse-incompatible-jvm-version-1-8-0-281-of-the-jvm-is-not-suitable-for-this
-startup
plugins/org.eclipse.equinox.launcher_1.6.400.v20210924-0641.jar
--launcher.library
plugins/org.eclipse.equinox.launcher.win32.win32.x86_64_1.2.400.v20211117-0650
-vm
C:\Program Files\Java\jdk-11.0.17\bin\javaw.exe
-vmargs
-Dosgi.requiredJavaVersion=11
-Xmx1024m
选择 Leak Suspects Report。
点击 Histogram。
搜索有泄露问题的文件
如下图操作。排除虚、弱、软引用,因为这些基本不会发生泄露。
点击后如下图,发现和Android Studio Profiler的结果很像。
MAT其他功能补充
饼图分析
饼图里列出了两个会泄露的类