转载

JVM 内存分析神器 MAT: Incoming Vs Outgoing References 你真的了解吗?

点击上方 蓝色字体 ,选择“设为星标”

优质文章,及时送达

了解 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 的更多知识。例如,一个应用程序的源代码如下所示:

现在,如果要为上述示例应用程序以图形方式绘制对象,则其外观将如下所示: JVM 内存分析神器 MAT: Incoming Vs Outgoing References 你真的了解吗? 图 1:示例应用程序的对象引用图

  • 对象 A 和对象 B 持有对象 C 的引用

  • 对象 C 持有对象 D 和对象 E 的引用

在这个示例项目中,让我们具体分析下对象 C 的 Incoming references 和 Outgoing references 。

对象 C 的 Incoming References

拥有对象 C 的引用的所有对象都称为 Incoming references。在此示例中,对象 C 的“Incoming references”是对象 A、对象 B 和 C 的类对象 。

为了证实这个判断,我们从上述示例应用程序中捕获了堆 Dump 文件,并将其载入到 Eclipse MAT 中进行分析。下图是 Eclipse MAT 针对对象 C 报告的 Incoming references

JVM 内存分析神器 MAT: Incoming Vs Outgoing 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。在此示例中,对象 C 的“outgoing references”是对象 D、对象 E 和 C 的类对象。以下是 Eclipse MAT 针对对象 C Outgoing references 的报告

JVM 内存分析神器 MAT: Incoming Vs 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,要闹哪样?

喜欢本文的朋友们,欢迎长按下图关注订阅号 涤生的博客 ,收看更多精彩内容

JVM 内存分析神器 MAT: Incoming Vs Outgoing References 你真的了解吗?

原文  http://mp.weixin.qq.com/s?__biz=MzUyMDE1ODQ3NQ==&mid=2247483953&idx=2&sn=a9b33ce5f8a08f221557b997813ad12a
正文到此结束
Loading...