对象查询语言OQL简明教程

更新时间:

1. OQL语法

OQL语法如下:

SELECT * FROM [ INSTANCEOF ]	<class_name> [ WHERE <filter-expression>]

2. 语法各子句说明

select部分

SELECT toString(x), 
       x.value,
       x.@usedHeapSize,
       toHex(x.@objectAddress),
       outbounds(x)
FROM java.lang.Integer x 
  1. 其中toStringoutbounds是内置的方法:

toHex(num)

十六进制显示数值

toString(object)

显示对象的字符串表示

dominators(object)

显示该对象立即支配的所有对象

outbounds(object)

显示对象引用的所有对象

inbounds(object)

显示被对象引用的所有对象

classof(object)

显示对象的java.lang.Class

dominatorof(object)

显示立即支配该对象的对象

  1. x.value表示访问对象的某个字段。

  2. x.@usedHeapSize表示访问对象的一些内置属性,常见属性如下:

x.@objectId

对象Id

x.@objectAddress

对象地址

x.@class

对象的java.lang.Class表示

x.@usedHeapSize

对象大小(Shallow size)

x.@retainedHeapSize

关联大小(Retained Size)

x.@classLoaderId

对象类加载器Id,仅当x是java.lang.Class时才有该属性

x.@length

数组长度,仅当x是数组时才有该属性

完整的列表属性请参见Eclipse文档

from部分

from表示查询的数据源,常见from数据源如下

SELECT * FROM java.lang.Integer

指定是java.lang.Integer类型的对象

SELECT * FROM INSTANCEOF java.util.AbstractCollection

指定是AbastractionCollection实例的对象

SELECT * FROM OBJECTS 0xcafebabe

以某个特定地址的对象作为数据源

SELECT v, v.@length FROM OBJECTS ( SELECT OBJECTS s.value FROM java.lang.String s ) v

以子查询结果作为数据源

where部分

where用于数据过滤,它支持如下符号:

>=, <=, >, <, [ NOT ] LIKE, [ NOT ] IN, IMPLEMENTS 

3. 附录