返回介绍

D.1 SELECT子句

发布于 2024-08-16 21:55:05 字数 1359 浏览 0 评论 0 收藏 0

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类型。

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文