使用MAT分析应用的内存信息

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

内存

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

Android

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


1. 内存文件

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

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

内存泄露

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

使用命令

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

2. 分析内存

下载Eclipse的MAT工具.

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

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


内存报告

内存整体情况.

内存

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

引用

3. 判断泄露

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

显示内存的所有引用情况


引用

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

显示单个类的内存情况


内存

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

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

泄露

代码

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

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


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

OK, that's all! Enjoy it!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,466评论 25 708
  • 内存管理的目的就是让我们在开发中怎么有效的避免我们的应用出现内存泄漏的问题。内存泄漏大家都不陌生了,简单粗俗的讲,...
    宇宙只有巴掌大阅读 2,415评论 0 12
  • 被文同时发布在CSDN上,欢迎查看。 APP内存的使用,是评价一款应用性能高低的一个重要指标。虽然现在智能手机的内...
    大圣代阅读 4,859评论 2 54
  • 岩岩早上出门的时候才记起,今天是传说中的圣诞节。管他什么圣诞节生蛋节呢,她甩了甩头,弯腰穿鞋,自嘲的想,什么节都跟...
    落微阅读 370评论 0 3
  • 昨晚洗漱时遇到一个棘手的问题,想想昨晚报名学车,然后拿到驾照,明年买到一辆实惠的轿车,可是我车往哪里停呀!毕竟自己...
    大洪阅读 121评论 0 0