读书人

mat 应用笔记

发布时间: 2012-11-15 15:16:15 作者: rapoo

mat 使用笔记

MAT 使用初探

今天线上一个应用的持久区满了,一直没有下来,导致一些服务不可用,就用jmap当出内存快照后,用MAT分析内存的基本信息,发现很多地方不会用。找了些资料记录在下来。

?

1.引用

?

Strong reference : 就是我们new出来的对象,但是还是被持有的应用,垃圾回收时不会回收这个应用soft reference ? : 我们new出来的对象,但是已经不被具体对象持有,常见的就是缓存中的对象引用,垃圾回收在内存还够的时候不会回收该部分内存信息,只有在内存不够时才会回收这块引用的对象weak reference ? : 当对象不在有强引用时候,垃圾回收时立刻回收。Phantom reference : 不会在内存中出现,因为它一般是同ReferenceQueue一起出现,来跟踪对象是否还是保持强引用。

?

?

2.术语

shallow size:对象自身中有的内存大小?

retained size:对象自身大小 + 该对象直接或是间接引用对象的shallow size

GC Roots:所有的对象引用refer chains的起点。

mat 应用笔记

?

MAP提供了两种分析方式:

1.查找内存泄漏的方式分析内存

2.通过组件方式分析内存主要从;空对象,重复对象加载等方面。

这个在第一次加载内存文件,或者可以通过

?

?

总结:

1.首先看retained size最大的那些数据,一般看内存都是想解决内存泄漏问题,可以通过Top Consumers或者是donimator tree等actions。

2.找到最大的数据后,通过list objects -- with outgoing references 查看具体持有了哪些对象,或者通过java basics -- classloader 。查看这个是因为我们这次因为perm区满了,需要查看这个数据。到底还是哪些classloader加载了数据。

?

?

tips:

持久区中存放的数据:

? 类信息,方法信息,常量池,静态变量,对于加载自己的classloader引用、interned strings(字符串驻留)

读书人网 >其他相关

热点推荐