分析android程序的内存 mat,使用MAT分析应用的内存信息

欢迎Follow我的GitHub, 关注我的简书. 其余参考Android目录.

bfb9a40a16e5

内存

bfb9a40a16e5

Android

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

1. 内存文件

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

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

bfb9a40a16e5

内存泄露

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

使用命令

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

2. 分析内存

下载Eclipse的MAT工具.

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

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

bfb9a40a16e5

内存报告

内存整体情况.

bfb9a40a16e5

内存

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

bfb9a40a16e5

引用

3. 判断泄露

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

显示内存的所有引用情况

bfb9a40a16e5

引用

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

显示单个类的内存情况

bfb9a40a16e5

内存

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

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

bfb9a40a16e5

泄露

代码

mFriendsPlatform = new WXSharePlatform(mActivity, title, content,

bitmap, pageUrl, SendMessageToWX.Req.WXSceneTimeline);

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

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

OK, that's all! Enjoy it!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值