高效地分析Android内存--MAT工具解析

欢迎Follow我的GitHub, 关注我的CSDN.

高效地分析Android内存--MAT工具解析_第1张图片

本文的合集已经编著成书,高级Android开发强化实战,欢迎各位读友的建议和指导。在京东即可购买:https://item.jd.com/12385680.html

Book

MAT(Memory Analyzer Tool), 是著名的Android内存分析工具, 虽然LeakCanary更加便捷, 但是MAT可以清楚地获知整体内存使用情况, 还是必须要掌握的. 我来讲解一下如何使用.


1. 内存文件

使用Android Studio底部的AndroidMonitor, 获取内存片段.

点击Initial GC回收内存, 使用应用, Dump Java Heap, 再次点击停止.

高效地分析Android内存--MAT工具解析_第2张图片

在Android的SDK中的platform-tools文件夹内, hprof-conv脚本把AS的内存格式转换为MAT的内存格式. 之后, 使用MAT打开文件.

使用命令

./hprof-conv path/file.hprof exitPath/heap-converted.hprof

2. 分析内存

下载Eclipse的MAT工具.

虽然是Eclipse的工具, 但是可以单独运行, 并不需要安装Eclipse.

打开内存片段, 选择内存报告.

高效地分析Android内存--MAT工具解析_第3张图片

内存整体情况.

高效地分析Android内存--MAT工具解析_第4张图片

选择直方图样式, 添加包名过滤.

高效地分析Android内存--MAT工具解析_第5张图片


3. 判断泄露

Activity或View大于1个对象, 都有可能发生内存泄露.

显示内存的所有引用情况

高效地分析Android内存--MAT工具解析_第6张图片

逐个判断即可, 有些对象的引用较多, 可能是使用了数组, 并不一定是内存泄露.

显示单个类的内存情况

高效地分析Android内存--MAT工具解析_第7张图片

使用搜索功能, 输入SQL语句, 并执行. 红色叹号执行搜索.

通过观察, 我们发现微信mWXApi传入了错误的Context, 导致内存泄露.

高效地分析Android内存--MAT工具解析_第8张图片

代码

        mFriendsPlatform = new WXSharePlatform(mActivity, title, content,
                bitmap, pageUrl, SendMessageToWX.Req.WXSceneTimeline);

直接传入Activity导致内存泄露, 修改为getApplicationContext即可.


其实还比较复杂, 简单的方法是使用LeakCanary, 参考.

OK, that’s all! Enjoy it!

你可能感兴趣的:(Android高级,Mystra,Android,MAT,内存分析工具)