知道的越多,|

VectorX

园龄:4年粉丝:154关注:48

2021-05-05 19:46阅读: 315评论: 0推荐: 0

<JVM下篇:性能监控与调优篇>补充:使用OQL语言查询对象信息

笔记来源:尚硅谷 JVM 全套教程,百万播放,全网巅峰(宋红康详解 java 虚拟机)

同步更新:https://gitee.com/vectorx/NOTE_JVM

https://codechina.csdn.net/qq_35925558/NOTE_JVM

https://github.com/uxiahnan/NOTE_JVM

补充:使用 OQL 语言查询对象信息

MAT 支持一种类似于 SQL 的查询语言 OQL(Object Query Language)。OQL 使用类 SQL 语法,可以在堆中进行对象的查找和筛选。

1. SELECT 子句

在 MAT 中,Select 子句的格式与 SQL 基本一致,用于指定要显示的列。Select 子句中可以使用“*”,查看结果对象的引用实例(相当于 outgoing references)。

SELECT * FROM java.util.Vector v

使用“OBJECTS”关键字,可以将返回结果集中的项以对象的形式显示。

SELECT objects v.elementData FROM java.util.Vector v

SELECT OBJECTS s.value FROM java.lang.String s

在 Select 子句中,使用“AS RETAINED SET”关键字可以得到所得对象的保留集。

SELECT AS RETAINED SET *FROM com.atguigu.mat.Student

“DISTINCT”关键字用于在结果集中去除重复对象。

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

2. FROM 子句

From 子句用于指定查询范围,它可以指定类名、正则表达式或者对象地址。

SELECT * FROM java.lang.String s

使用正则表达式,限定搜索范围,输出所有 com.atguigu 包下所有类的实例

SELECT * FROM "com\.atguigu\..*"

使用类的地址进行搜索。使用类的地址的好处是可以区分被不同 ClassLoader 加载的同一种类型。

select * from 0x37a0b4d

3. WHERE 子句

Where 子句用于指定 OQL 的查询条件。OQL 查询将只返回满足 Where 子句指定条件的对象。Where 子句的格式与传统 SQL 极为相似。

返回长度大于 10 的 char 数组。

SELECT *FROM Ichar[] s WHERE s.@length>10

返回包含“java”子字符串的所有字符串,使用“LIKE”操作符,“LIKE”操作符的操作参数为正则表达式。

SELECT * FROM java.lang.String s WHERE toString(s) LIKE ".*java.*"

返回所有 value 域不为 null 的字符串,使用“=”操作符。

SELECT * FROM java.lang.String s where s.value!=null

返回数组长度大于 15,并且深堆大于 1000 字节的所有 Vector 对象。

SELECT * FROM java.util.Vector v WHERE v.elementData.@length>15 AND v.@retainedHeapSize>1000

4. 内置对象与方法

OQL 中可以访问堆内对象的属性,也可以访问堆内代理对象的属性。访问堆内对象的属性时,格式如下,其中 alias 为对象名称:

[ <alias>. ] <field> . <field>. <field>

访问 java.io.File 对象的 path 属性,并进一步访问 path 的 value 属性:

SELECT toString(f.path.value) FROM java.io.File f

显示 String 对象的内容、objectid 和 objectAddress。

SELECT s.toString(),s.@objectId, s.@objectAddress FROM java.lang.String s

显示 java.util.Vector 内部数组的长度。

SELECT v.elementData.@length FROM java.util.Vector v

显示所有的 java.util.Vector 对象及其子类型

select * from INSTANCEOF java.util.Vector

本文作者:VectorX

本文链接:https://www.cnblogs.com/vectorx/p/14732555.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   VectorX  阅读(315)  评论(0)    收藏  举报
编辑推荐:
· Java虚拟机代码是如何一步一步变复杂且难以理解的?
· 领域驱动的事实与谬误 一 DDD 与 MVC
· SQL Server 2025 中的改进
· 当数据爆炸遇上SQL Server:优化策略全链路解析
· 记录一次线上问题排查:JDK序列化问题
阅读排行:
· 一个包含 80+ C#/.NET 编程技巧实战练习开源项目!
· 待到山花烂漫时:鸿蒙开发者的个人感悟
· 【SQL周周练】一句 SQL 如何帮助 5 个人买到电影院最好的座位?
· Excel百万数据高性能导出方案!
· JavaScript 没有“包”
欢迎来到本站!
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起