简介
MAT(Memory Analyzer Tool)是 Eclipse 基金会开发的一款开源 Java 堆内存分析工具,用于定位内存泄漏、分析内存占用问题。它支持解析 hprof 文件(Heap Dump),提供可视化报告和强大的查询功能。
核心功能
- 泄漏检测:自动识别潜在的内存泄漏对象(如大对象或重复对象)。
- 直方图分析:按类、类加载器或包统计对象数量和内存占用。
- 支配树(Dominator Tree):展示对象引用关系,快速定位内存瓶颈。
- OQL 查询:类似 SQL 的查询语言,支持自定义对象检索。
- 线程分析:查看线程栈和关联对象的内存占用。
安装方式
- 独立安装 :从 Eclipse MAT 官网 下载独立版本。
- Eclipse 插件:通过 Eclipse Marketplace 搜索安装。
使用步骤
生成 Heap Dump
通过 JVM 参数或命令触发堆转储:
bash
jmap -dump:format=b,file=heap.hprof <pid>
或运行时通过代码生成:
java
HotSpotDiagnosticMXBean.dumpHeap("heap.hprof", true);
分析 Heap Dump
- 打开 MAT 并加载
heap.hprof文件。 - 使用泄漏检测报告(Leak Suspects Report)初步分析问题。
- 通过支配树或直方图深入查看对象引用链。
关键技巧
- 排除软引用/弱引用:在分析时过滤非强引用对象,聚焦实际内存占用。
- 对比多个 Dump:通过对比不同时间点的堆转储,定位增长对象。
- MAT 高级配置 :调整
MemoryAnalyzer.ini文件中的-Xmx参数以处理大文件。
常见问题解决
- OOM 错误 :若 MAT 自身内存不足,需增加
-Xmx参数(如-Xmx8g)。 - 解析失败 :确保
hprof文件完整,可通过jhat或jvisualvm验证。
替代工具
- VisualVM:轻量级监控,适合实时分析。
- JProfiler:商业工具,提供更全面的性能分析。
MAT 是 Java 开发者排查内存问题的首选工具,结合实践能显著提升诊断效率。