频繁Yong GC分析

最近项目频繁Yong GC
分析工具:eclipse memory analyzer (MAT)下载地址如下:下载页面
此工具分为eclipse插件和独立版本两部分,如果你是用的是eclipse可以直接使用插件版MAT,其他选择独立版本。
下载完成进入正题:
打开软件:
在这里插入图片描述

点击左上角->File->选择open Heap Dump
频繁Yong GC分析_第1张图片
常用的主要是这两部分:
频繁Yong GC分析_第2张图片
先说一下Dominator Tree,
频繁Yong GC分析_第3张图片
可以看一下每一行最左侧都有文件类型的图标,图标下面有一个红色的点,带红点的表示可以被GC Roots访问到的,根据上面的讲解,可以被GC Root访问到的对象是无法回收的,那么这就说明所有的带红色点的对象都是泄露的对象吗?当然不是,因为有些对象系统需要一直使用,本来就是不应该被回收的,我们可以注意到,上图中所有带红点的对象后面都写着System Class 说明这是一个由系统管理的对象,并不是由我们自己创建并导致内存泄漏的对象。

仅凭一张图就可以找到频繁ygc的原因么?当然不是,继续往下看,可以根据Retained Heap 查看堆占用大小。以第二条数据为例class org.apache.catalina.loader.WebappClassLoader @ 0xc14e7c50
选中之后右键Path GC Roots->exclude weak references,为什么选择exclude weak references呢?因为弱引用 是不会组织对象被垃圾回收器回收的,所以我们这里直接把它排除掉,结果如图:
频繁Yong GC分析_第4张图片
从图中的内容可以看到WebappClassLoader主要是我们自己创建的Thread ,并不是SystemClass 是可以被GC访问到的,导致不能被回收,主要是线程长时间占用,且查询内容过大,导致eden 不断创建大对象,产生频繁GC

你可能感兴趣的:(java后端,linux,java)