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 vSELECT 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