1.MAT的简单介绍
MAT(Memory Analyzer Tool) 是基于heap dumps来进行内存分析的工具,一个基于Eclipse的内存分析工具,是一个快速、功能丰富的JAVA heap分析工具,它可以帮助我们查找内存泄漏和减少内存消耗。
2.下载安装
- 下载地址 http://www.eclipse.org/mat/downloads.php
- 地址里面有插件包和独立安装包,如下图
- 选择自己合适的下载
- 我这里选择的是zip包,在eclipse中进行了安装。
3.获取.hprof文件
- 在android studio中打开Android Monitor面板,选择Memory,点击左侧dump java heap按钮dump内存信息,会在项目的captures文件夹下生成.hprof文件,(进文件夹里看,)如下图所示。
但是上面生成的文件并不能在mat中打开,我们需要使用hprof-conv工具转一下,hprof-conv在SDK的platform-tools下,windos下双击启动,ubuntu下./hprof-conv启动,转化命令如下
hprof-conv 输入文件路径 输出文件路径
结果如图显示:
,这样我们就可以在mat中打开了。
- 当然,我们也可以直接在eclipse中启动DDMS,点击dump xxx,然后stop,就会被mat自动打开了,如下图:
注意下方的actions区域,这是我们需要重点关注的对象。
4.有用的几个功能
4.1.Histogram:列出内存中的对象,对象的个数以及大小
4.2 Dominator Tree 列出最大的对象以及其依赖存活的Object (大小是以Retained Heap为标准排序的)
4.3 Top Consumers : 通过图形列出最大的object
4.4 Thread_Overview 应用的线程信息。
4.5 查看GC引用关系
在dominator tree 试图下,点击某个对象,右键Path To GC Roots —> with all references ,查看引用关系。如下图
看到,我这里只有一个引用,复杂的对象是有引用链的,不在多说了,
5. 如何知道是否有内存泄露
上面说了那么多,然而,并没有什么乱用,稀里糊涂的看了一些图,稀里糊涂的知道了一些视图,但是,妈的 我们还不知道怎么去查看哪些有内存泄露。但是,在4.5中我们可以看到GC roots可以看到引用关系,那么,我们就可以通过他来查看了,通过层层的引用关系,我们可以追溯到最终的引用点,通过结合代码分析以及检查引用类型以及被引用类等等。
6.总结
额,这么多下来,我也仅仅是了解到基本用法了,还有更多的用法需要我在工作中去领悟。
最后。给出几个参考链接。
时间: 2024-10-10 17:53:37