java oql_深入理解java虚拟机(八):java内存分析工具-MAT和OQL

以下内容翻译自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.[.]..……

(访问堆转储快照中对象的字段)

2.[.]@……

(访问java bean属性)

目标

接口

属性

含义

任意堆中的对象

Iobject

objectId

快照中对象的ID

objectAddress

快照中对象的地址

Class

对象所属的类

usedHeapSize

对象的shallowSize

retainedHeapSize

对象的retainedSize

displayName

对象的显示名称

类对象

Iclass

classLoaderId

类加载器Id

任意数组

Iarray

length

数组的长度

5、OQL 内建函数

.[.]@([,])……

(调用OQL java方法,加“()”会令MAT解释为一个OQL java调用)

常见的OQL java方法

目标

接口

属性

含义

$snapshot

Isnapshot

getClasses()

获取所有类的集合

getClassesByName(String name,boolean includeSubClasses)

获取指定类的集合

Class object

Iclass

hasSuperClass()

如果对象有父类则返回true

isArrayType()

如果Class是数组类型则返回true

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值