使用 MAT分析内存泄漏

本文详细介绍了如何使用MAT(Memory Analyzer Tool)进行内存泄漏分析。通过MAT的柱状图、Incoming/Outgoing References、浅堆与深堆的概念,以及实战案例,深入理解对象引用关系和内存占用。MAT的高级功能如支配树视图、内存对比、线程视图、Path To GC Roots和OQL查询,有助于定位和解决复杂的内存问题,特别是对于ThreadLocal可能导致的内存泄漏问题提供了分析思路。
摘要由CSDN通过智能技术生成

使用 MAT分析内存泄漏

我们前面讲过,我们可以使用 jmap –histo 这种命令去分析哪些对象占据着我们的堆空间。但是那是比较容易分析的问题,如果是遇到内存情况比较复杂 的情况,命令的方式是看不出来的,这个时候我们必须要借助一下工具。当然前提是通过 jmap 命令把整个堆内存的数据 dump 下来。

在这里插入图片描述

内存分析工具

VisualVM

在这里插入图片描述
在这里插入图片描述
这个是上节的那个案例抛出了 OOM 后到处的内存的 dump 日志信息,我们可以导入

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
VisualVm 属于比较寒酸的工具,基本上跟 jmap 之类的命令没多少区别,它只是可以事后看,通过 dump 信息来看,里面没有多少可以做分析的功能。

MAT 简介

MAT 工具是基于 Eclipse 平台开发的,本身是一个 Java 程序,是一款很好的内存分析工具,所以如果你的堆快照比较大的话,则需要一台内存比较大的 分析机器,并给 MAT 本身加大初始内存,这个可以修改安装目录中的 MemoryAnalyzer.ini 文件。在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

概要

在这里插入图片描述

柱状图

在这里插入图片描述

MAT 中的 Incoming/Outgoing References

在柱状图中,我们看到,其实它显示的东西跟 jmap –histo 非常相似的,也就是类、实例、空间大小。

但是 MAT 有一个专业的概念,这个可以显示对象的引入和对象的引出。

在 Eclipse MAT 中,当右键单击任何对象时,将看到下拉菜单。如果选择“ListObjects”菜单项,则会注意到两个选项:
 with incoming references 对象的引入
 with outgoing references 对象的引出

案例解释理解在这里插入图片描述

代码中对象和引用关系如下:
对象 A 和对象 B 持有对象 C 的引用
对象 C 持有对象 D 和对象 E 的引用

在这里插入图片描述
我们具体分析对象 C 的 Incoming references 和 Outgoing references 。 1

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值