关于java:JVM下篇性能监控与调优篇补充使用OQL语言查询对象信息

9次阅读

共计 1682 个字符,预计需要花费 5 分钟才能阅读完成。

https://gitee.com/vectorx/NOT…

https://codechina.csdn.net/qq…

https://github.com/uxiahnan/N…

[toc]

补充:应用 OQL 语言查问对象信息

MAT 反对一种相似于 SQL 的查询语言 OQL(Object Query Language)。OQL 应用类 SQL 语法,能够在堆中进行对象的查找和筛选。

1. SELECT 子句

在 MAT 中,Select 子句的格局与 SQL 基本一致,用于指定要显示的列。Select 子句中能够应用“*”,查看后果对象的援用实例(相当于 outgoing references)。

SELECT * FROM java.util.Vector v

应用“OBJECTS”关键字,能够将返回后果集中的项以对象的模式显示。

SELECT objects v.elementData FROM java.util.Vector v

SELECT OBJECTS s.value FROM java.lang.String s

在 Select 子句中,应用“AS RETAINED SET”关键字能够失去所得对象的保留集。

SELECT AS RETAINED SET *FROM com.atguigu.mat.Student

“DISTINCT”关键字用于在后果集中去除反复对象。

SELECT DISTINCT OBJECTS classof(s) FROM java.lang.String s

2. FROM 子句

From 子句用于指定查问范畴,它能够指定类名、正则表达式或者对象地址。

SELECT * FROM java.lang.String s

应用正则表达式,限定搜寻范畴,输入所有 com.atguigu 包下所有类的实例

SELECT * FROM "com\.atguigu\..*"

应用类的地址进行搜寻。应用类的地址的益处是能够辨别被不同 ClassLoader 加载的同一种类型。

select * from 0x37a0b4d

3. WHERE 子句

Where 子句用于指定 OQL 的查问条件。OQL 查问将只返回满足 Where 子句指定条件的对象。Where 子句的格局与传统 SQL 极为类似。

返回长度大于 10 的 char 数组。

SELECT *FROM Ichar[] s WHERE s.@length>10

返回蕴含“java”子字符串的所有字符串,应用“LIKE”操作符,“LIKE”操作符的操作参数为正则表达式。

SELECT * FROM java.lang.String s WHERE toString(s) LIKE ".*java.*"

返回所有 value 域不为 null 的字符串,应用“=”操作符。

SELECT * FROM java.lang.String s where s.value!=null

返回数组长度大于 15,并且深堆大于 1000 字节的所有 Vector 对象。

SELECT * FROM java.util.Vector v WHERE v.elementData.@length>15 AND v.@retainedHeapSize>1000

4. 内置对象与办法

OQL 中能够拜访堆内对象的属性,也能够拜访堆内代理对象的属性。拜访堆内对象的属性时,格局如下,其中 alias 为对象名称:

[<alias>.] <field> . <field>. <field>

拜访 java.io.File 对象的 path 属性,并进一步拜访 path 的 value 属性:

SELECT toString(f.path.value) FROM java.io.File f

显示 String 对象的内容、objectid 和 objectAddress。

SELECT s.toString(),s.@objectId, s.@objectAddress FROM java.lang.String s

显示 java.util.Vector 外部数组的长度。

SELECT v.elementData.@length FROM java.util.Vector v

显示所有的 java.util.Vector 对象及其子类型

select * from INSTANCEOF java.util.Vector
正文完
 0