MAT使用笔记
来源:互联网 发布:苹果编程语言 编辑:程序博客网 时间:2024/06/05 21:14
转载于:http://inter12.iteye.com/blog/1407492
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的起点。
以上左图中以object1来说,单独一个object1大小就是shallow size,object1及所有蓝色对象就是该对象直接或是间接引用的就是retained size。
同理右图中object4还被gc roots引用到,那么retained size就不包含这个。
3.实例
3.1导入一个内存文件后,用MAT打开,具体如下图所表示
3.2 details:一些基本信息
Size: 153.7 MB Classes: 331 Objects: 4.1m Class Loader: 3 Unreachable Objects Histogram
3.3 biggest object by retained size:显示在内存较大的对象信息
list objects -- with outgoing references : 查看这个对象持有的外部对象引用。
list objects -- with incoming references : 查看这个对象被哪些外部对象引用。
show objects by class -- with outgoing references :查看这个对象类型持有的外部对象引用
show objects by class -- with incoming references :查看这个对象类型被哪些外部对象引用
paths to gc root : 显示不同类型引用(上文中提到的Strong ,soft,weak )到跟节点的路径。
merge shorest path to gc root : 合并最短路径到root节点,这个具体没试过。
java basics:
-- classloader 该对象对应的classloader信息 。
-- thread details :线程信息
-- thread stacks :线程堆栈
-- find String : 在这个对象中查询需要的字符串(还不确定,需要再搞下)
-- group by : 根据某个字段统计出现的个数
java collections:这个暂时没研究,以后再搞。
leak Identification -- top consumers :几个大消耗内存的对象
3.4 可用操作
actions:列出每个类型的实例数及大小 。
donimator tree :列出所有对象在整个内存对象中所占百分比。比较有用。
Top Consumers: 根据类名和包名列出开销最大的对象。
Duplicate Classes: 查找出在不同classloader中加载的相同类。
step by step 方式
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(字符串驻留)
- MAT使用笔记
- Mat 使用笔记
- mat 使用笔记
- MAT使用
- MAT使用
- OpenCV使用FileStorage读写Mat数据(学习笔记)
- OpenCV笔记(cv::Mat)
- OpenCv笔记一:Mat
- OpenCV学习笔记-Mat
- Opencv--Mat笔记
- 10LINUX使用MAT
- opencv中Mat使用
- MAT 工具使用详解
- MAT使用实例
- MAT的使用
- openCV mat使用
- MAT使用分析
- 使用mat分析内存
- 集合容器随笔
- 2.面向对象设计模式学习之Singleton单件模式
- HOJ 2786 Convert Kilometers to Miles
- JavaWEB开发-国际化
- Android的TextView不能自动换行的问题
- MAT使用笔记
- android系统
- matlab中如何删除向量和矩阵中的元素?
- mpi连接性能测试
- 汉诺塔
- 分析OpenSurf(3)
- Java 泛型
- HOJ 2620 The Dragon of Loowater
- 大四签约前,这些你知道吗?