- 前言
- 第2版与第1版的区别
- 本书面向的读者
- 如何阅读本书
- 语言约定
- 内容特色
- 参考资料
- 第一部分 走近 Java
- 第1章 走近 Java
- 第二部分 自动内存管理机制
- 第2章 Java 内存区域与内存溢出异常
- 第3章 垃圾收集器与内存分配策略
- 第4章 虚拟机性能监控与故障处理工具
- 第5章 调优案例分析与实战
- 第三部分 虚拟机执行子系统
- 第6章 类文件结构
- 第7章 虚拟机类加载机制
- 第8章 虚拟机字节码执行引擎
- 第9章 类加载及执行子系统的案例与实战
- 第四部分 程序编译与代码优化
- 第10章 早期(编译期)优化
- 第11章 晚期(运行期)优化
- 第五部分 高效并发
- 第12章 Java 内存模型与线程
- 第13章 线程安全与锁优化
- 附录
- 附录A 编译 Windows 版的 OpenJDK
- 附录B 虚拟机字节码指令表
- 附录C HotSpot 虚拟机主要参数表
- 附录D 对象查询语言(OQL)简介[1]
- 附录E JDK 历史版本轨迹
文章来源于网络收集而来,版权归原创者所有,如有侵权请及时联系!
D.2 FROM子句
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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论