深入理解java虚拟机(八):java内存分析工具-MAT和OQL
来源:互联网 发布:淘宝超低价宝贝集锦 编辑:程序博客网 时间:2024/06/05 03:25
以下内容翻译自MAT帮助文档。
MAT下载地址 http://www.eclipse.org/mat/
一、Class Histogram
Class Histogram shows the classes found in the snapshot, the number of objects for each class, the heap memory consumption of these objects, and the minimum retained size of the objects
二、Dominator tree
Dominator tree shows for a particular object which other objects depend on it and will be garbage collected if that particular object becomes unreachable.
三、Paths to GC roots
This view find objects responsible for keeping the selected object in the heap.
Componenet report A heap dump contains many objects. But which of those belong to your component? And what conclusions can you draw from them? This is where the Component Report can help。
四、OQL
OQL is the build-in object query language. Learn to perform custom SQL-like queries on the heap dump in one minute. classes as tables, objects as rows, and fields as columns。
1、OQL-SELECT
1.SELECT * FROM java.lang.String
2.SELECT toString(s), s.count, s.value FROM java.lang.String s
3.SELECT toString(s) AS Value,s.@usedHeapSize AS "Shallow Size" FROM java.lang.String s
(@为属性访问器,可以使用AS起个别名)
4.SELECT AS RETAINED SET * FROM java.lang.String
(使用AS RETAINED SET 获得与选择对象相关联的对象集合)
5.SELECT OBJECTS dominators(s) FROM java.lang.String s
(OBJECTS 关键字使得dominators 返回二维数组简化为一维对象列表)
6.SELECT DISTINCT OBJECTS classof(s) FROM java.lang.String s
(DISTINCT 去重复)
7、查询所有的异常对象
SELECT * FROM INSTANCEOF java.lang.Exception exceptions
SELECT exceptions.@displayName, exceptions.detailMessage.toString() FROM INSTANCEOF java.lang.Exception exceptions
2、OQL-FROM
1.SELECT * FROM "java\.lang\..*"
(支持正则)
2.SELECT * FROM java.lang.String
3.SELECT * FROM 0xe14a100
(根据类对象在堆转储快照中的地址查询)
4.SELECT * FROM 3022
(根据对象在堆转储快照中的地址ID)
5.SELECT * FROM ( SELECT * FROM java.lang.Class c )
6.SELECT * FROM ${snapshot}.getClasses()
(使用属性访问器)
7.SELECT * FROM INSTANCEOF java.lang.ref.Reference
(INSTANCEOF 会把指定类的子类也查询出来)
8.SELECT * FROM OBJECTS java.lang.String
(OBJECTS 禁止OQL把查询范围解释为对象实例,上述结果为java.lang.String对应的Class)
3、OQL-WHERE
1.SELECT * FROM java.lang.String s WHERE s.count >= 100
2.SELECT * FROM java.lang.String s WHERE toString(s) LIKE ".*day"
3.SELECT * FROM java.lang.String s WHERE s.value NOT IN dominators(s)
4.SELECT * FROM java.lang.String s WHERE toString(s) = "monday"
5.SELECT * FROM java.lang.String s WHERE s.count > 100 AND s.@retainedHeapSize > s.@usedHeapSize
6.SELECT * FROM java.lang.String s WHERE s.count > 1000 OR s.value.@length >1000
7.SELECT * FROM java.lang.String s WHERE (s.count > 1000) = true
WHERE toString(s) = "monday"
WHERE dominators(s).size() = 0
WHERE s.retainedHeapSize > 1024L
WHERE s.@GCRootInfo != null
4、属性访问器
1.[<alias>.]<field>.<field>.……
(访问堆转储快照中对象的字段)
2.[<alias>.]@<attribute>……
(访问java bean属性)
目标接口属性含义任意堆中的对象IobjectobjectId快照中对象的IDobjectAddress快照中对象的地址Class对象所属的类usedHeapSize对象的shallowSizeretainedHeapSize对象的retainedSizedisplayName对象的显示名称类对象IclassclassLoaderId类加载器Id任意数组Iarraylength数组的长度5、OQL 内建函数
.[<alias>.]@<方法>([<表达式>,<表达式>])……
(调用OQL java方法,加“()”会令MAT解释为一个OQL java调用)
常见的OQL java方法
目标接口属性含义$snapshotIsnapshotgetClasses()获取所有类的集合getClassesByName(String name,boolean includeSubClasses)获取指定类的集合Class objectIclasshasSuperClass()如果对象有父类则返回trueisArrayType()如果Class是数组类型则返回true- 深入理解java虚拟机(八):java内存分析工具-MAT和OQL
- 深入理解java虚拟机(八):java内存分析工具-MAT和OQL
- 《深入理解JAVA虚拟机》学习笔记(八)JAVA内存模型与线程
- 深入理解 Java 虚拟机-内存
- 深入理解Java虚拟机读书笔记八
- 3.《深入理解Java虚拟机》内存溢出实例分析
- 深入理解java虚拟机 虚拟机内存划分
- java 内存泄露分析工具-mat
- 深入理解java虚拟机(八)类加载过程详解
- Java内存区域和内存溢出异常(深入理解Java虚拟机)
- 深入理解java虚拟机(一)虚拟机内存划分
- [转]深入理解java虚拟机(一)虚拟机内存划分
- 虚拟机内存管理—深入理解Java虚拟机(三)
- 深入理解java虚拟机【Java内存结构】
- 学习【深入理解java虚拟机】Java内存
- 深入理解Java虚拟机--java内存区域
- Java内存区域---深入理解Java虚拟机
- 深入理解Java虚拟机之java内存
- LeetCode(34)-Palindrome Number
- spring(10)------Bean三种管理方式
- Java 中的 hashcode一
- 服务器创建用户并允许用户远程登录服务器
- Spring4学习(二):创建项目 Hello Spring
- 深入理解java虚拟机(八):java内存分析工具-MAT和OQL
- poj 3669 Meteor Shower(bfs)
- ★hdu1427(经典dfs)
- Android Studio报错
- Java7中Switch支持String
- Android学习笔记之ToggleButton
- 设计模式之策略模式
- Opencv报“HIGHGUI ERROR: V4L/V4L2: VIDIOC_S_CROP”错误处理方法
- CCProgressTimer