返回介绍

D.2 FROM子句

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

1.FROM子句指定需要查询的类

OQL查询需要在FROM子句定义的查询范围上进行操作。FROM子句可以接受的查询范围描述包括下列几种方式:

1)通过类名进行查询,如:

SELECT * FROM java.lang.String

2)通过正则表达式匹配一组类名进行查询,如:

SELECT * FROM"java\.lang\..*"

3)通过类对象在堆转储快照中的地址进行查询,如:

SELECT * FROM 0xe14a100

4)通过对象在堆转储快照中的ID进行查询,如:

SELECT * FROM 3022

5)在子查询中的结果集中进行查询,如:

SELECT * FROM(SELECT * FROM java.lang.Class c WHERE c implements org.eclipse.mat.snapshot.model.IClass)

上面的查询返回堆转储快照中所有实现了“org.eclipse.mat.snapshot.model.IClass”接口的类。下面的这句查询使用属性访问器达到了同样的效果,它直接调用了ISnapshot对象的方法:

SELECT * FROM $snapshot.getClasses()

2.包含子类

使用“INSTANCEOF”关键字把指定类的子类列入查询结果集之中,如:

SELECT * FROM INSTANCEOF java.lang.ref.Reference

这个查询的结果集中将会包含WeakReference、SoftReference和PhantomReference类型的对象,因为它们都继承自java.lang.ref.Reference。下面这句查询也有相同的结果:

SELECT * FROM $snapshot.getClassesByName("java.lang.ref.Reference",true)

3.禁止查询类实例

在FROM子句中使用“OBJECTS”关键字可以禁止OQL把查询的范围解释为对象实例,如:

SELECT * FROM OBJECTS java.lang.String

这个查询的结果不是返回快照中所有的字符串,而是只有一个对象,也就是java.lang.String类对应的Class对象。

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

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

发布评论

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