MAT

2020-05-28  本文已影响0人  xiaotimel

MAT 下载路径 https://www.eclipse.org/downloads/download.php?file=/mat/1.10.0/rcp/MemoryAnalyzer-1.10.0.20200225-macosx.cocoa.x86_64.zip

更改Info.plist (显示包内容->Contents下) 指定jdk路径

<array>
    <!-- 指定启动使用的JVM -->
    <string>-vm</string>
    <string>/Library/Java/JavaVirtualMachines/jdk1.8.0_221.jdk/Contents/Home/bin/java</string>
    <!-- 指定启动的工作空间 -->
    <string>-data</string>
      <string>/Applications/mat.app/Contents/MacOS/workspace</string>
        <!-- 原有内容,不动 -->
    <string>-keyring</string>
    <string>~/.eclipse_keyring</string>
</array>

要全面掌握MAT的用法,必须要先了解 隐藏在 MAT 使用中的四大细节,如下所示:

1)、善于使用 Regex 查找对应泄漏类。
2)、使用 group by package 查找对应包下的具体类。
3)、明白 with outgoing references 和 with incoming references 的区别。
- with outgoing references:它引用了哪些对象。
- with incoming references:哪些对象引用了它。
4)、了解 Shallow Heap 和 Retained Heap 的区别。
Shallow Heap:表示对象自身占用的内存。
Retained Heap:对象自身占用的内存 + 对象引用的对象所占用的内存。

除此之外,MAT 共有 5个关键组件 帮助我们去分析内存方面的问题,分别如下所示:

1)、Dominator_tree
2)、Histogram
3)、thread_overview
4)、Top Consumers
5)、Leak Suspects

1、Dominator(支配者):

如果从GC Root到达对象A的路径上必须经过对象B,那么B就是A的支配者。

2、Histogram和dominator_tree的区别:

1)、Histogram 显示 Shallow Heap、Retained Heap、Objects,而 dominator_tree 显示的是 Shallow Heap、Retained Heap、Percentage。
2)、Histogram 基于 类 的角度,dominator_tree是基于 实例 的角度。Histogram 不会具体显示每一个泄漏的对象,而dominator_tree会。

3、thread_overview

查看 线程数量 和 线程的 Shallow Heap、Retained Heap、Context Class Loader 与 is Daemon。

4、Top Consumers

通过 图形 的形式列出 占用内存比较多的对象。

在下方的 Biggest Objects 还可以查看其 相对比较详细的信息,例如 Shallow Heap、Retained Heap。

5、Leak Suspects

列出有内存泄漏的地方,点击 Details 可以查看其产生内存泄漏的引用链。

上一篇下一篇

猜你喜欢

热点阅读