jvm 对象查询语言(OQL)简介

SELECT子句

SELECT子句用于确定查询语句需要从堆转储快照中选择什么内容。如果需要显示堆转储快照中的对象,并且浏览这些对象的引用关系,可以使用“*”,这与传统SQL语句中的习惯是一致的,如:

SELECT * FROM java.lang.String

1.选择特定的显示列

查询也可以选择特定的需要显示的字段,如:

SELECT toString(s),s.count,s.value FROM java.lang.String s

查询可以用“@”符号来使用Java对象的内存属性访问器。MAT提供了一系列的内置函数来获取与分析相关的信息,如:

SELECT toString(s),s.@usedHeapSize,s.@retainedHeapSize FROM java.lang.String s

关于对象属性访问器的具体内容,可以参见下文的“属性访问器”。

2.使用列别名

可以使用AS关键字来对选择的列进行命名,如:

SELECT toString(s)AS Value,
s.@usedHeapSize AS"Shallow Size",
s.@retainedHeapSize AS"Retained Size"
FROM java.lang.String s

可以使用“AS RETAINED SET”关键字来获得与选择对象相关联的对象集合,如:

SELECT AS RETAINED SET * FROM java.lang.String

3.拼合成为一个对象列表选择项目

可以使用“OBJECTS”关键字把SELECT子句中查找出来的数据项目转变为对象,如:

SELECT OBJECTS dominators(s)FROM java.lang.String s

上面例子中,函数“dominators()”将会返回一个对象数组,因此,如果没有“OBJECTS”关键字,上面的查询将返回一组二维的对象数组的列表。通过使用关键字“OBJECTS”,我们迫使OQL把查询结果缩减为一维的对象列表。

4.排除重复对象

使用“DISTINCT”关键字可以排除结果集中的重复对象,如:

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

上面的例子中,函数“classof()”的作用是返回对象所属的Java类,当然,所有字符串对象的所属类都是java.lang.String,因此,如果上面的查询中没有加入DISTINCT关键字,查询结果就会返回与快照中的字符串数量一样多的行记录,并且每行记录的内容都是java.lang.String类型。

注:本附录翻译自Eclipse Memory Analyzer Tool(MAT,Eclipse出品的内存分析工具)的OQL帮助文档。

转载自:深入理解Java虚拟机:JVM高级特性与最佳实践(第2版)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值