来源: https://sourl.cn/ggYpYX
前言
Eclipse Memory Analyzer Tool(MAT)是一个强大的基于Eclipse的内存分析工具,可以帮助我们找到内存泄露,减少内存消耗。
工作中经常会遇到一些内存溢出、内存泄露等问题,同时还可能导致CPU使用率也很高,因为在频繁的进行GC垃圾回收,这时候就需要分析导致问题的原因,MAT是一个比较好用的工具,故在此总结一下个人觉得比较有用的一些MAT相关概念。
1、Overview
![42281f4f6d6cc04cb4e029424fc06c92.png](https://i-blog.csdnimg.cn/blog_migrate/f367735e9ee4f22ff7edd15abf791b7d.jpeg)
通过
File >
Open Heap Dump... 打开dump文件,最先展示就是Overview概述界面,可以对Heap Dump有一个大致的了解,并提供了一些视图、报告的入口,这些视图、报告都对分析Heap Dump很有帮助,后续会介绍。 鼠标移动到饼图某个区域上方,在左侧会看到对象的详细信息,如左上方的
Inspector 展示了如:对象hashcode、类名、包名、Class类对象、父类、类加载器、shallow size、retained size、GC root类型。左下方展示了对象的一些属性信息、类层级信息。
2、Histogram视图
以下方式可以打开Histogram柱状图: (1)点击Overview页面Actions区域内的“Histogram视图”链接
![8869aea4b9242161149b9d1712881f3b.png](https://i-blog.csdnimg.cn/blog_migrate/636fb161531184f516b4d7045b038b6c.jpeg)
(2)点击工具栏的“histogram按钮”
![d8d217aa73706309b82cd7d23cb0915c.png](https://i-blog.csdnimg.cn/blog_migrate/1ad2ff023e0da461c669ddfe4b7cc5c7.jpeg)
Histogram视图:
该视图以Class类的维度展示每个Class类的实例存在的个数、 占用的 [Shallow内存] 和 [Retained内存] 大小,可以分别排序显示。 从Histogram视图可以看出,哪个Class类的对象实例数量比较多,以及占用的内存比较大,Shallow Heap与Retained Heap的区别会在后面的概念介绍中说明。 不过,多数情况下,在Histogram视图看到实例对象数量比较多的类都是一些基础类型,如char[](因为其构成了String)、String、byte[],所以仅从这些是无法判断出具体导致内存泄露的类或者方法的,可以使用 List objects 或 Merge Shortest Paths to GC roots 等功能继续钻取数据。如果Histogram视图展示的数量多的实例对象不是基础类型,是有嫌疑的某个类,如项目代码中的bean类型,那么就要重点关注了。
3、Dominator Tree(支配树)视图
以下方式可以打开Dominator Tree视图: (1)点击Overview页面Actions区域内的“Dominator Tree视图”链接
![fa10a31e13577140b0a2586280bdf611.png](https://i-blog.csdnimg.cn/blog_migrate/91e469c7cd533ee50aaa91ea4e09b9be.jpeg)
(2)点击工具栏的“Dominator Tree按钮” ,为整个堆打开一个支配树视图
![86d8097c9573bd174698f17c7c35190f.png](https://i-blog.csdnimg.cn/blog_migrate/eb11315693e7f604f6a6f48177e84482.jpeg)
Dominator Tree(支配树)视图: