讲师中心 微信公众号
AI工具推荐 视频效率加速

Java 中怎么分析 Heap Dump 里的支配树 Dominator Tree

胖敏酱_7063

胖敏酱_7063

发布时间:2026-09-18 10:33:16

|

291人浏览过

|

来源于php中文网

原创

支配树的核心是识别“谁真正持有对象、谁阻止对象被回收”,其根为GC Roots,每个节点的直接支配者是所有通往它的路径必经的最近对象,反映强可达性下的真实内存控制权。

java 中怎么分析 heap dump 里的支配树 dominator tree

分析 Heap Dump 中的支配树(Dominator Tree),核心是理解“谁真正持有对象、谁阻止了对象被回收”,而不是只看引用链长度或对象数量。它帮你快速定位内存泄漏的根因,比如某个本该被释放的缓存容器,却因为被一个静态字段意外强引用而活了下来。

什么是支配树?关键要懂“支配”关系

在支配树中,如果对象 A 是对象 B 的支配者(Dominator),意味着:从 GC Roots 到 B 的**每一条可达路径都必须经过 A**。换句话说,只要 A 被回收,B 就一定不可达(除非有其他非支配路径,但支配树已确保这是唯一入口)。所以树的根是 GC Root,每个节点只有一父节点(直接支配者),子节点是它“支配”的所有对象。

这和普通引用树完全不同——引用树可能发散、重复、包含弱/软引用;支配树是精简、唯一、强可达性的拓扑结构,反映真实的内存“控制权”。

用 Eclipse MAT 打开支配树视图

MAT(Memory Analyzer Tool)是最常用且对支配树支持最完善的工具:

Alibabacloud Sdk Client Initialization For Java
Alibabacloud Sdk Client Initialization For Java

在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。

下载

立即学习Java免费学习笔记(深入)”;

  • 打开 .hprof 文件后,点击菜单 Reports → Dominator Tree,或直接点右上角“Dominator Tree”标签页
  • 默认按“Retained Heap”降序排列——这个值最关键:表示如果删除该对象,**能立即释放多少堆内存**(即它支配的所有对象的 shallow heap 总和)
  • 勾选右上角 “Group by package/class”“Group by superclass”,快速聚焦可疑类型(如大量 HashMap、ArrayList、自定义 Service 类)
  • 双击某行进入“Merge Shortest Paths to GC Roots”,查看它为什么还活着——这里显示的是**实际起作用的强引用链**(自动过滤掉虚/弱/软引用)

识别典型泄漏模式:看 retained heap + 引用链

支配树本身不告诉你“为什么错”,但结合上下文能快速锁定问题:

  • 单个对象 retained heap 特别大(比如 >100MB):大概率是缓存未清理、日志堆积、大数组未释放。点开它,看它的 field 值(如 map.size、list.size)、所属类名、创建位置(如果有行号信息)
  • 某个工具类或监听器实例出现在支配树靠前位置,retained heap 中等但数量多:检查是否注册了监听器没反注册、ThreadLocal 没 remove、匿名内部类持有了 Activity/Fragment(Android)或 ServletContext(Web)
  • java.util.HashMap 或 ConcurrentHashMap 占主导,且 key 是业务对象:重点查 key 是否没实现 hashCode/equals、或 value 持有外部强引用导致整张 map 无法回收
  • 线程对象(java.lang.Thread)retained heap 高:说明该线程还在运行,且它栈帧里的局部变量或 ThreadLocal 可能持有大量对象——看 “Thread Stack” 视图,找长生命周期对象

进阶技巧:用 OQL 定制查询 + 对比快照

支配树是静态快照,复杂问题需动态验证:

  • 在 MAT 的 OQL Console 中执行:SELECT * FROM java.util.HashMap WHERE @retainedHeap > 5000000,直接筛选 retained heap 超 5MB 的 HashMap
  • 用两个时间点的 dump(正常态 vs OOM 前)做 Compare Blame:MAT 会高亮 retained heap 增长最多的类和实例,比单看一棵树更准
  • 导出支配树为 CSV(右键 → Export to CSV),用 Excel 筛选 “Class Name” 和 “Retained Heap”,加一列计算 “Retained per Instance” = Retained Heap / Objects,找出“单个实例吃内存”的罪魁

热门AI工具

更多
VibeKnow
VibeKnow Hot

一款AI视频创作工具,主要用于全球首个AI知识视频创作平台,文档、文章、网页,一键生成视频,适合需要提升相关任务效率的用户。

Seko
Seko Hot

一款AI视频创作工具,主要用于商汤科技推出的创编一体的AI短视频创作Agent,适合需要提升相关任务效率的用户。

超级简历WonderCV

一款AI办公效率工具,主要用于免费求职简历模版下载制作,应届生职场人必备简历制作神器,适合需要提升相关任务效率的用户。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

SkildArt
SkildArt Hot

SkildArt是一款AI文本写作工具,一站式 AI 视觉创作平台。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

咔片AIPPT

一款在线AI演示文稿制作工具,可根据主题和内容需求辅助生成PPT结构与页面,提高演示材料制作效率。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

AionClaw
AionClaw Hot

AionClaw是一款面向办公、创作和编程任务的AI桌面智能体。

相关专题

更多
java
java

Java是一个通用术语,用于表示Java软件及其组件,包括“Java运行时环境 (JRE)”、“Java虚拟机 (JVM)”以及“插件”。php中文网还为大家带了Java相关下载资源、相关课程以及相关文章等内容,供大家免费下载使用。

8717

2023.06.15

java正则表达式语法
java正则表达式语法

java正则表达式语法是一种模式匹配工具,它非常有用,可以在处理文本和字符串时快速地查找、替换、验证和提取特定的模式和数据。本专题提供java正则表达式语法的相关文章、下载和专题,供大家免费下载体验。

5942

2023.07.05

java自学难吗
java自学难吗

Java自学并不难。Java语言相对于其他一些编程语言而言,有着较为简洁和易读的语法,本专题为大家提供java自学难吗相关的文章,大家可以免费体验。

5332

2023.07.31

java配置jdk环境变量
java配置jdk环境变量

Java是一种广泛使用的高级编程语言,用于开发各种类型的应用程序。为了能够在计算机上正确运行和编译Java代码,需要正确配置Java Development Kit(JDK)环境变量。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

964

2023.08.01

java保留两位小数
java保留两位小数

Java是一种广泛应用于编程领域的高级编程语言。在Java中,保留两位小数是指在进行数值计算或输出时,限制小数部分只有两位有效数字,并将多余的位数进行四舍五入或截取。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

808

2023.08.02

java基本数据类型
java基本数据类型

java基本数据类型有:1、byte;2、short;3、int;4、long;5、float;6、double;7、char;8、boolean。本专题为大家提供java基本数据类型的相关的文章、下载、课程内容,供大家免费下载体验。

1136

2023.08.02

java有什么用
java有什么用

java可以开发应用程序、移动应用、Web应用、企业级应用、嵌入式系统等方面。本专题为大家提供java有什么用的相关的文章、下载、课程内容,供大家免费下载体验。

2309

2023.08.02

java在线网站
java在线网站

Java在线网站是指提供Java编程学习、实践和交流平台的网络服务。近年来,随着Java语言在软件开发领域的广泛应用,越来越多的人对Java编程感兴趣,并希望能够通过在线网站来学习和提高自己的Java编程技能。php中文网给大家带来了相关的视频、教程以及文章,欢迎大家前来学习阅读和下载。

19651

2023.08.03

Vibeknow在线使用入口合集
Vibeknow在线使用入口合集

本专题汇总了Vibeknow在线创作视频的官方入口及网页版使用教程,涵盖PPT、PDF、Word等文档一键转讲解视频的核心操作,并整理了免费版水印规则与手机端浏览器访问指南,助你快速将知识内容视频化。

0

2026.09.21

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
dev.java 官方:Learn Java
dev.java 官方:Learn Java

共0课时 | 0人学习

Java JDBC数据库连接官方教程
Java JDBC数据库连接官方教程

共0课时 | 0人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn