点击上方 蓝色字体 ,选择“设为星标”
优质文章,及时送达
了解 Eclipse MAT 中 incoming and outgoing 引用之间的区别。
Eclipse MAT(内存分析器工具)是分析 JVM 堆 Dump 文件的强大工具。它具有几个非常有效分析内存问题的强大功能。“Incoming references”和“Outgoing references”就是其中一种功能。在本文中,我们来探讨 Incoming references 和 Outgoing references 以及它们之间的区别。在 Eclipse MAT 中,当右键单击任何对象时,将看到下拉菜单。如果选择“ListObjects”菜单项,则会注意到两个选项:
with outgoing references
with incoming references
通过示例理解知识会更容易,咱们来看看这样一个例子。让我们通过示例来了解有关传入 Incoming references 和 Outgoing references 的更多知识。例如,一个应用程序的源代码如下所示:
现在,如果要为上述示例应用程序以图形方式绘制对象,则其外观将如下所示: 图 1:示例应用程序的对象引用图
对象 A 和对象 B 持有对象 C 的引用
对象 C 持有对象 D 和对象 E 的引用
在这个示例项目中,让我们具体分析下对象 C 的 Incoming references 和 Outgoing references 。
拥有对象 C 的引用的所有对象都称为 Incoming references。在此示例中,对象 C 的“Incoming references”是对象 A、对象 B 和 C 的类对象 。
为了证实这个判断,我们从上述示例应用程序中捕获了堆 Dump 文件,并将其载入到 Eclipse MAT 中进行分析。下图是 Eclipse MAT 针对对象 C 报告的 Incoming references
图 2:对象 C 的 Incoming references
在"Dominator Tree"中的 Object C 上单击鼠标右键,然后选择"List Objects",再选择 ”with incoming references“时,Eclipse MAT 会生成上图的报告。报告中展示对象 C 的 Incoming references 为对象 A、对象 B 和 C 的类对象。Eclipse MAT 还显示了用于引用对象 C 的变量,可以看到使用变量“c1”引用对象 C 的对象 A,类似地,还报告了用于引用对象 C 的其他变量。
对象 C 引用的所有对象都称为 Outgoing References。在此示例中,对象 C 的“outgoing references”是对象 D、对象 E 和 C 的类对象。以下是 Eclipse MAT 针对对象 C Outgoing references 的报告
图 3:对象 C 的 Outgoing references
在"Dominator Tree"中的 Object C 上单击鼠标右键,然后选择"List Objects",再选择 ”with incoming references“时,Eclipse MAT 会生成上图的报告。报告中展示对象 C 的 Incoming references 为对象 D、对象 E 和 C 的类对象。Eclipse MAT 还按显示对象 C 引用的其他对象。可以看到对象 C 使用变量 d1 引用了对象 D。类似地,报告还显示了对象 C 中使用的其他变量。
通过本文主要阐述了 Incoming references and Outgoing references 之间的区别。
原文:https://dzone.com/articles/eclipse-mat-incoming-outgoing-references
近期热文
JVM 源码解读之 CMS GC 触发条件
如何减少长时间的 GC 停顿?
简单的 HTTP 调用,为什么时延这么大?
服务刚启动就 Old GC,要闹哪样?
喜欢本文的朋友们,欢迎长按下图关注订阅号 涤生的博客 ,收看更多精彩内容