Su的技术博客

  • 首页
  • 原创
  • 视频
  • Java
  • MySQL
  • DDD
  • 事故复盘
  • 架构方案
  • AI
  • Other
  • 工具
    • AI工具集
    • 工具清单
    • JSON在线格式化
    • JSON在线比较
    • SQL在线格式化
  • 打赏
  • 关于
路很长,又很短
  1. 首页
  2. Java
  3. 正文
                           

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

2024-01-18 2020点热度 0人点赞 0条评论

了解 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. public class A {
  2. private C c1 = C.getInstance();
  3. }
  4. public class B {
  5. private C c2 = C.getInstance();
  6. }
  7. public class C {
  8. private static C myC = new C();
  9. public static C getInstance() {
  10. return myC;
  11. }
  12. private D d1 = new D();
  13. private E e1 = new E();
  14. }
  15. public class D {
  16. }
  17. public class E {
  18. }
  19. public class SimpleExample {
  20. public static void main (String argsp[]) throws Exception {
  21. A a = new A();
  22. B b = new B();
  23. }
  24. }

现在,如果要为上述示例应用程序以图形方式绘制对象,则其外观将如下所示:

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

本文仅供学习!所有权归属原作者。侵删!文章来源: 涤生的博客 -Ram Lakshmanan :http://mp.weixin.qq.com/s/YjGcyrfIsdK3UpetVih_dg

更多文章:

  1. JVM 内存分析工具 MAT 的深度讲解与实践——进阶篇(长文)
  2. JVM 内存分析工具 MAT 的深度讲解与实践——入门篇
  3. JVM 内存分析神器 MAT: Shallow Heap Vs Retained Heap 你理解的对吗?
  4. 殷浩详解DDD 第四讲:领域层设计规范
  5. Eureka源码剖析之一:初始化-启动
  6. JVM 内存分析工具 MAT 的深度讲解与实践——高阶篇
  7. 设计模式在外卖营销业务中的实践
  8. 从代码到设计的性能优化指南
  9. 殷浩详解DDD系列 第二讲 - 应用架构
  10. 手把手教你实战TDD
标签: 转载 JVM Java MAT 内存泄露
最后更新:2024-01-17

coder

分享干货文章,学习先进经验。

打赏 点赞
< 上一篇
下一篇 >

文章评论

razz evil exclaim smile redface biggrin eek confused idea lol mad twisted rolleyes wink cool arrow neutral cry mrgreen drooling persevering
取消回复

广告
文章目录
  • 对象 C 的 Incoming References
  • 对象 C 的 Outgoing References
最新 热点 推荐
最新 热点 推荐
视频笔记:微服务架构P4 设计模式:每服务数据库、API 网关和事件驱动架构 干货 | 论Elasticsearch数据建模的重要性 马蜂窝消息总线——面向业务的消息服务设计 基于 MySQL Binlog 实现可配置的异构数据同步 视频笔记:Google发布Agent2Agent协议 视频笔记:什么是微服务,为什么是微服务? 视频笔记:什么是AI 智能体? 视频笔记:什么是Flink?
Elasticsearch 使用误区之六——富文本内容写入前不清洗基于 MySQL Binlog 实现可配置的异构数据同步马蜂窝消息总线——面向业务的消息服务设计视频笔记:微服务架构P4 设计模式:每服务数据库、API 网关和事件驱动架构干货 | 论Elasticsearch数据建模的重要性你可以不用RxJava,但必须得领悟它的思想!如何秒级实现接口间“幂等”补偿:一款轻量级仿幂等数据校正处理辅助工具视频笔记:什么是Flink?
从MVC到DDD,该如何下手重构? LLM下半场之Agent基础能力概述:Profile、Memory、Plan、Action、Eval学习笔记 3分钟掌握CQS和CQRS架构设计原则 事务异常:Transaction rolled back because it has been marked as rollback-only 系统设计 | 高性价比的测试策略("瓜藤"比喻) 笔记 | 面试官问我:TCP与UDP的区别 Elasticsearch 使用误区之一——将 Elasticsearch 视为关系数据库! 阿里云香港云服务器P0史诗级宕机事件复盘

CRUD (1) Event Sourcing (1) graphql (1) id (1) NoSQL (1) quarkus (1) rest (1) RocketMQ (2) Spring Boot (1) zk (1) zookeeper (1) 上下文 (1) 事务消息 (1) 二级缓存 (1) 值对象 (1) 关系数据库 (1) 分布式缓存 (1) 原子性 (1) 唯一ID (1) 商品 (1) 多对多 (1) 子域 (1) 字符集 (1) 客户端心跳 (1) 幂等 (2) 干货 (1) 并发 (1) 应用场景 (1) 应用架构图 (1) 康威定律 (2) 异步复制 (1) 微服务架构 (3) 总体方案 (1) 技术方案 (2) 技术架构 (2) 技术架构图 (1) 技能 (1) 持续集成 (1) 支撑域 (1) 故障恢复 (1) 数据架构图 (1) 方案选型 (1) 日记 (1) 服务发现 (1) 服务治理 (1) 服务注册 (2) 机房 (1) 核心域 (1) 泄漏 (1) 洋葱架构 (1) 消息队列 (5) 源码剖析 (1) 灰度发布 (1) 熔断 (1) 生态 (1) 画图工具 (1) 研发团队 (1) 线程 (2) 组织架构 (1) 缓存架构 (1) 编码 (1) 视频 (19) 读写分离 (1) 贵州 (1) 软件设计 (1) 迁移 (1) 通用域 (1) 集群化 (1) 雪花算法 (1) 顺序消息 (1)

推荐链接🔗
  • AI工具集
  • 工具箱🛠️

COPYRIGHT © 2014-2025 verysu.com . ALL RIGHTS RESERVED.

Theme Kratos Made By Seaton Jiang

粤ICP备15033072号-2

x