1、概述
想要深入的进行分析并确定内存泄漏,就要分析 疑似发生内存泄漏时所生成堆存储文件(hprof)。堆存储文件可以使用DDMS或者Memory Monitor来生成,输出的文件格式为hpof,而MAT就是来分析堆存储文件的。

MAT,全称为Memory Analysis Tool,它是Eclipse的插件, 下载地址 : https://www.eclipse.org/mat/downloads.php。

2、生成hprof文件
hprof文件的获取要结合实际的使用场景,随便生成一个hprof文件用来分析,也只能看出对象的创建个数和内存使用情况,如果你要分析内存泄漏问题,你就要结合可能发生内存泄漏的场景来获取hprof文件,再对其进行分析。

2.1 hprof文件获取方式
1、我们可以通过Android Studio 的Profiler 来生成:

2、也可以把Leakcanary工具检测工具生成的hprof导出来

3、转换hprof的格式并用MAT打开
生成的hprof文件并不是标准的,还需要将它转换为标准的hprof文件,这样才会被MAT识别从而进行分析,可以使用SDK自带的hprof-conv进行转换,它的路径在sdk/platform-tools中,进入到该路径执行以下语句即可:

hprof-conv 转换前的文件地址 转换后的文件地址

4、用Mat打开hprof文件和常用面板介绍
用mat打开hprof文件后会看到的是一个饼状图,它主要用来显示内存的消耗,饼状图的彩色区域代表被分配的内存,灰色区域的则是空闲内存,点击每个彩色区域可以看到这块区域的详细信息,

如下图所示

其中分析内存泄漏最常用的就是Histogram和Dominator Tree,我们重点介绍这两部分。

4.1、Histogram面板介绍 ——>Histogram在类的角度上进行分析,注重量的分析。

Classe Name:类名。
Objects:对象实例的个数。
Shallow Heap:对象自身占用的内存大小,不包括它引用的对象。如果是数组类型的对象,它的大小是数组元素的类型和数组长度决定。如果是非数组类型的对象,它的大小由其成员变量的数量和类型决定。
Retained Heap:一个对象的Retained Set所包含对象所占内存的总大小。换句话说,Retained Heap就是当前对象被GC后,从Heap上总共能释放掉的内存。
Regex :筛选过滤
ps:Retained Set指的是这个对象本身和他持有引用的对象以及这些引用对象的Retained Set所占内存大小的总和。

4.2、Dominator Tree 面板介绍 ——> Dominator Tree是在对象实例的角度上进行分析,注重引用关系分析

Classe Name:类名。
Shallow Heap:对象自身占用的内存大小,不包括它引用的对象。如果是数组类型的对象,它的大小是数组元素的类型和数组长度决定。如果是非数组类型的对象,它的大小由其成员变量的数量和类型决定。
Retained Heap:一个对象的Retained Set所包含对象所占内存的总大小。换句话说,Retained Heap就是当前对象被GC后,从Heap上总共能释放掉的内存。
Percentage:内存占比。
Regex :筛选过滤。

5、找到可疑的后,在可疑项上右击,选择Merge Shortest Paths to GC Root,然后在选择过滤掉软、弱、虚等能销毁的引用,如下图所示:

之后仅能看到详细的引用关系图了,我们就可以根据引用关系发现可能存在的问题了。

6、用Mat 对两个hprof文件进行对比
如过内存泄漏的场景比较简单,可以查看两个面板,通过类的个数和内存占用情况来找到内存泄漏的问题。但是复杂的情况就需要通过对比hpof文件来进行分析了。使用步骤为:

操作应用,生成第一个hpof文件。
进行一段时间操作,再生成第二个hpof文件。
用MAT打开这两个hpof文件。
将第一个和第二个hpof文件的Dominator Tree或者Histogram添加到Compare Basket中,如下图所示。

都添加好以后点击红色❗️

就可以看到Dominator Tree的对比图了,Histogram的对比同上操作。

这样通过前后对比更容易发下问题所在。

本次记录内容侧重内存泄漏问题的排查,Mat很多用法都没用到,大家如果熟悉其他使用方法,请大家帮忙补充完善,有错误的地方还请大家指正。

MAT的使用(一)使用方法介绍相关推荐

  1. 遍历opencv中的mat像素的几种方法和概念

    今天在看矩形滤波的时候忽然脑子短路,把一些概念全弄混了,现总结一下,以便下次再混的时候可以参考确认下,自己的理解,有错的地方还请指正. 首先,在Opencv2中基本上都是用的Mat来表示图像了,C++ ...

  2. 基于鱼眼相机的SLAM方法介绍

    本文是一篇关于鱼眼相机的SLAM的介绍以及开源demo体验的介绍,希望有兴趣的小伙伴能够自行体验,并积极分享相关内容.欢迎交流和讨论,联系邮箱:dianyunpcl@163.com {MultiCol ...

  3. MATLAB不同时频信号处理方法介绍及效果对比

    本文欢迎非商业目的的学习分享转载,转载请附上原文链接及作者ID 本文为作者自身的一个学习总结,大部分内容在相关教材上也可以找到,有空的也会不定期更新.本身也在学习的过程中,出现错误在所难免,欢迎大家在 ...

  4. MAT分析OOM dump文件方法

    系列文章目录 第一章 JVM 排查问题命令汇总 第二章 MAT分析OOM dump文件方法 第三章 Java服务使用CAT监控导致OOM的分析 目录 1.明确分析目标及分析指标 2.分析工具对比(jv ...

  5. webview 加载php页面内容,WebView加载优化的方法介绍

    本篇文章给大家带来的内容是关于WebView加载优化的方法介绍,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. WebView加载优化 当WebView的使用频率变得频繁的时候,对于其 ...

  6. LoadRunner设置检查点的几种方法介绍

    LoadRunner设置检查点的几种方法介绍 发布时间: 2011-5-03 11:53    作者: 一米阳光做测试    来源: 51Testing软件测试网采编 字体:  小  中  大  | ...

  7. python加号换行,Python字符串拼接六种方法介绍

    Python字符串拼接的6种方法: 1.加号 第一种,有编程经验的人,估计都知道很多语言里面是用加号连接两个字符串,Python里面也是如此直接用"+"来连接两个字符串: prin ...

  8. 小程序 sha1和服务器有关系吗,微信小程序使用sha1实现密码加密的方法介绍

    微信小程序使用sha1实现密码加密的方法介绍,字符串,程序,转换为,详解,函数 微信小程序使用sha1实现密码加密的方法介绍 易采站长站,站长之家为您整理了微信小程序使用sha1实现密码加密的方法介绍 ...

  9. 360p4虚拟服务器,360安全路由p4c常见的问题以及解决方法介绍

    360安全路由p4c在使用的时候会遇到哪些问题呢?360安全路由p4c在使用的时候操作并不是很复杂,但是对于新手用户来说还是有点难度的,接下来的文章中小编将介绍使用这款路由器遇到的五大问题及其姐姐方法 ...

  10. 如何用计算机弹逆战6,逆战星光弹夹使用方法介绍 轻松玩转星光弹

    逆战星光弹夹使用方法介绍 轻松玩转星光弹,今天小编为大家带来的是逆战星光弹夹使用方法介绍,感兴趣的小伙伴快来看看吧. 目前,逆战共有星光弹匣三款.分别为:陷阱加速.空气墙.强固.三款不同的弹匣,用了三 ...

最新文章

  1. 《JAVA与模式》之责任链模式
  2. pymongo insert_many 批量插入
  3. unittest框架学习笔记
  4. 【洛谷P1538】迎春舞会之数字舞蹈
  5. 【Blog.Core开源】将Program升级为.NET6.0版本
  6. 【剑指offer - C++/Java】3、从尾到头打印链表
  7. c语言程序设计报告数制转换,数制转换-C语言程序设计课程设计报告.docx
  8. String与StringBuilder区别总结
  9. linux awk数组使用
  10. js删除数组中的对象_JS中的面向对象
  11. 计算机转游戏,利用双计算机调试游戏程序 (转)
  12. office2010 错误1706 解决办法
  13. Aggressive cows--二分法思想
  14. 服务器系统2019回滚2016,原版系统一键优化精简方案(Win10/Server2016/Server2019)
  15. iphone,ipad尺寸汇总
  16. a non-fatal error occured whilst loading database modules
  17. 多个fbx文件怎么合并_Unity3D之多个fbx导入场景, 合并多个动画
  18. Ubuntu 20.04 修改笔记本亮度
  19. 小程序点击按钮分享功能
  20. 20189200余超 2018-2019-2 移动平台应用开发实践第十二周作业

热门文章

  1. 多人协作git workflow规范
  2. 从输入url到页面渲染完成经历的那些事~
  3. 鸿蒙系统在哪时间升级一次,华为鸿蒙系统升级时间表
  4. 记录第一个360浏览器翻译插件
  5. php论坛整合,PHPCMS整合Discuz论坛
  6. 什么是博客(Blog)?
  7. JavaScript实现简易ATM
  8. CAD2016安装出现致命错误
  9. windows xp 算号原理
  10. 数字电压表单片机 c语言程序,单片机数字电压表(带仿真图C程序).docx