最近使用MAT 的学习过程,有不准确的地方,欢迎指正😁
项目中需要定位内存泄露位置的有效方法
MAT 准备工具
工具地址 : https://www.eclipse.org/mat/
Android Studio生成hprof文件 然后用MAT 具体分析:
-
1 profile
-
2 生成 hprof 文件
选择 package ,根据自己包名,查找那些对象存在泄漏风险
3 在左侧,保存文件,生成 hprof 文件
-
4 使用SDK platform-tools 把 hprof 文件转换成 MAT工具可识别的格式
/** 如果转换工具出现问题,可以查看这个
[mac下 使用MAT 查看android应用内存情况]https://www.jianshu.com/p/6593538f1c09
感谢分享,非常完美😝 **/
转换mat标准文件
命令:hprof-conv -z src dst
src 是原文件
dst 是需要转换成的文件, 注意名字一定有 _mat
例如:hprof-conv -z 1.hprof 1_mat.hprof
-
5 将生成好的,MAT 工具可识别的文件,用MAT工具打开
点击 Histogram
-
6 查找刚刚在profile 存在内存泄露的对象
可以看到, MainActivity 有两个对象,说明存在泄漏问题
-
7 点击右键选择
- Merge Shortest Paths to GC Roots
- exclude all plantom/weak/soft etc. references
-
8 最终找到哪些位置引用而产生的内存泄漏