1、安装地址:
https://eclipse.org/mat/downloads.php
2、选择Mac OSX(Mac/Cocoa/x86_64);
3、点击Download;
下载完成之后,解压包打开MAT;
但是会提示一个错误窗,显示一个路径,文件是一个以时间戳命名的log文件;打开之后错误如下:
本来MAT工具是eclipes的一个插件,但是Android studio 3+之后就不怎么支持了,单独安装MAT应该是本地存储环境问题,错误大概意思是文件路径发生变更,写入不进去;(这是eclipse的一个bug,https://bugs.eclipse.org/bugs/show_bug.cgi?id=339647#c5)
解决办法:右键显示MAT包内容,进入Contents->MacOS下面,有一个MemoryAnalyzer的命令,打开终端,运行下面命令:
./MemoryAnalyzer -data ./dump
打开MAT,启动成功;
Android Profiler 生成的Heap Dump文件转化成MAT识别的格式;
把hprof文件放到android->SDK->platform-tools文件夹中,打开终端输入如下命令:
hprof-conv xxxx.hpfor yyyy.hprof
xxx.hprof为Android Profile导出的hprof文件,全路径,yyyy.hprof文件转换之后的文件;
1、Overview(概述)
2、Histogram(直方图)
3、Leak Suspects(泄漏猜想)
1、Histogram
列出内存中的对象,对象的个数以及大小.
2、Dominator Tree
列出最大的对象以及其依赖存活的Object(大小是以Retained Heap为标准排序)
3、Top Consumers
通过图形列出最大的Object
4、Shallow Heap
无序排列Shallow size就是对象本身占用内存的大小, 不包含其引用的对象.针对非数组类型的对象,它的大小就是对象与它所有的成员变量大小的总和.
5、Retained Heap
它表示如果一个对象被释放掉,那会因为该对象的释放而减少引用进而被释放的所有的对象(包括被递归释放的)所占用的heap大小.
1、Path To GC Roots
列出当前对象到GCRoot的引用链(自底向上)
2、Merge Shortest Paths to GC Roots
列出当前对象到GC的引用链(自顶向下)
3、With incoming references 和 With outgoing references
With incoming references:列出引用当前对象的对象(内存泄漏需要重点关注);
With outgoing references:列出当前对象引用的对象
4、List Objects 和 Show Objects By Class
List Objects:按照类的实例(对象)来显示
Show Objects By class:按照类名来显示
5、references的过滤器
5.1、with all references 即所有引用都显示出来
5.2、exclude weak reference 既不显示弱引用
5.3、exclude soft reference 既不显示软引用
5.4、exclude phantom reference 既不显示幽灵引用
由于weak/soft/phantom引用都可以被GC回收,所以三者都可以不显示.通常使用exclude weak/soft reference.(weak是引用可回收时立即被回收变为null,soft是引用可回收但会等到内存不足时才回收,phantom是用来跟踪引用释放用的,本身不会产生强引用)