jhat是jdk自带的堆转储快照分析工具,通过启动内置http服务器(默认端口7000)以网页形式展示对象统计、引用链和gc roots等信息,支持oql查询,但自jdk 9起被弃用、jdk 14起正式移除。

jhat 是 JDK 自带的堆快照(Heap Dump)分析工具,它会在本地启动一个轻量级 HTTP 服务,将解析后的堆信息以网页形式展示,方便开发者通过浏览器查看对象统计、引用链、GC Roots 等信息。
启动 jhat 并自动开启 HTTP 服务
jhat 默认就是以内置 HTTP 服务方式运行的。只需一条命令即可启动:
jdk/bin/jhat -port 7000 heap-dump.hprof
执行后,jhat 会读取 heap-dump.hprof 文件,完成解析(可能耗时数秒到数分钟,取决于堆大小),然后输出类似:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
Server is ready. Starting HTTP server on port 7000 Server started on port 7000
此时打开浏览器访问 http://localhost:7000 即可进入 Web 界面。
关键参数控制 HTTP 行为
-
-port <port></port>:指定 HTTP 服务端口(默认 7000) -
-J-Xmx<size></size>:设置 jhat 进程堆内存(如-J-Xmx4g),避免解析大 dump 时 OOM -
-allowRemoteAccess:允许远程 IP 访问(默认只绑定 localhost,加此参数才支持其他机器访问) -
-stack false:关闭线程栈分析(加快启动,若不需线程视图可启用)
在 Web 界面查看对象统计
进入 http://localhost:7000 后,首页即显示概览,点击顶部导航栏的:
- "All Classes including platform"(或 "Show all classes"):列出所有类及其实例数量、总占用大小(Shallow Heap)、保留大小(Retained Heap)
- "Histogram" 链接:直出按实例数降序排列的类统计表,含 Class Name、Instances、Bytes 字段,是定位内存膨胀最常用的入口
- "Biggest Objects" 或 "Show instance counts for all classes":进一步筛选高频对象或按包分组查看
常见问题与注意点
- jhat 已在 JDK 9+ 中被标记为 deprecated,JDK 14+ 起正式移除;建议新项目优先使用 JDK Mission Control (JMC)、VisualVM 或 Eclipse MAT
- 解析过程单线程且内存消耗高,大堆(>2GB)建议配合
-J-Xmx调大内存,否则易卡住或崩溃 - Web 页面无搜索/过滤高级功能,如需精确查找某类对象,可用
http://localhost:7000/histo/后加查询参数(如?q=java.util.ArrayList) - 不支持 HTTPS,生产环境切勿开启
-allowRemoteAccess并暴露到公网
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










