更改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 可以查看其产生内存泄漏的引用链。
网友评论