eclipse memory analyzer 是一个用来分析 Java 堆内存的工具,平时也被叫做 eclipse mat 插件。它既能排查内存问题,也能观察整个 Java 应用运行时的状态和行为。工具会读取 Java 运行时环境生成的转储文件快照,借此找出那些单靠调试代码很难发现的复杂问题。用它打开 dump 文件后,可以直观看到各个对象占用了多少内存、实例有多少个,以及对象之间是怎么互相引用的。常见用途包括查询堆对象、对比对象、寻找责任对象和运行泄漏可疑报告等。

1、 获取并打开堆转储文件进行后续分析
2、 运行泄漏可疑报告,帮助判断是否存在内存泄漏
3、 列出占用内存最大的对象,快速锁定重点
4、 寻找责任对象,理清对象之间的引用责任链
5、 通过 OQL 查询堆对象,按条件筛选目标实例
6、 分析类加载器相关信息
7、 分析 Java 集合的使用情况
8、 分析 Finalizer 相关行为
- 打开 Eclipse,依次进入 help 菜单下的 Eclipse Marketplace
- 点击 install,等下方进度条走完后,勾选第一个选项并点击 confirm
- 同意协议后点击 Finish,开始安装 MAT
- 用 Heap 查看当前堆大小为 2300M
- 添加一个页后,堆大小变成 2340M
- 把刚添加的页删掉,堆大小仍为 2340M
- 多次重复操作,结果都相似,说明添加和删除页存在内存泄漏,当然也要注意排除其它因素的干扰
- 把操作前后的 hprof 文件都 Dump 出来,用 mat 打开并得到 histgram 结果
- 用 HomePage 字段过滤 histgram 结果,列出该类的对象实例列表,会看到两个表中的对象集合大小不同,操作后比操作前多出一个 HomePage,说明确实存在泄漏
- 把两个列表进行对比,找出多出来的那个对象,再用查找 GC Root 的方法找出是谁串起了这条引用线路,定位就结束了
(您的评论需要经过审核才能显示)
0条评论