Android内存优化(三)Java Heap内存分析之MAT使用及其二次开发

本文主要从MAT使用及其MAT如何二次开发两点来阐述

MAT如何分析内存问题

标题MAT作为Android Java内存分析的利器,功能十分强大,通常可用此工具发现内存泄漏问题,内存异常问题,网上的帖子非常之多。分析过程大概如下:
1:安装MAT工具
2:生成hprof文件
adb shell am dumpheap /data/local/tmp/.hprof
3:hprof-conv转换一下
直接生成的hprof文件打开会有诸多问题,需要sdk工具转换一下
4:MAT打开hprof文件,情形如下图:
在这里插入图片描述
5:开始查找内存异常问题
(1)点击Leak Suspects查看内存泄漏情况
但根据实际使用,有些泄漏检测不准确,建议只是将其作为参考
(2)点击Histogram,查看内存占用大问题
通常占用内存大的主要是图片信息,大致情况如下:
在这里插入图片描述
如果想看图片所有的引用链关系,则可以点击右键选择:
在这里插入图片描述
选择exclude all phantom/weak/soft相关引用主要是排除能被主动释放掉的内存,通常这个操作就是发现内存异常问题,有可能是内存泄漏问题,也有可能是内存使用不当问题。这部分涉及到诸多业务细节,不便贴出截图,还请谅解
(3)点击Dominator Tree,发现内存泄漏问题
在这里插入图片描述
可以在左上角输入正则表达式,比如发现Activity/Fragment相关的泄漏问题,就可以在左上角输入Activity/Fragment,如果有些Activity/Fragment个数超多1个,则需要验证是否有泄漏出现,设计到具体业务,不便贴出截图,还请谅解

MAT工具二次开发

使用过MAT到朋友都会比较惊讶于它的便捷,但还有没有更加便捷的分析方法呢?答案是肯定的。
MAT整个分析过程,需要认为参与的因素还是蛮多的,通过脚本控制把流程串起来,就可以省掉人力成本,但有个无法解决的问题就是MAT分析hprof的过程,依然需要人为参与,而我所描述的MAT工具二次开发也主要是针对这一部分,流程的自动化是很容易实现的,但hprof文件的自动分析可能需要费点力气。
在这不聊具体代码,只聊思路,因为这部分我也没做实现。后面会慢慢做起来的。
思路就是:在开源的MAT代码基础上,将手动使用MAT的分析思路落实到代码中,比如分析内存占用大的case,分析内存泄漏的case,分析实例最多的case等等。

猜你喜欢

转载自blog.csdn.net/longlong2015/article/details/82975013