Chao's Blog Chao's Blog
首页
  • vue

    • vue路由
  • 学习笔记

    • 《JavaScript教程》
    • 《JavaScript高级程序设计》
    • 《ES6 教程》
    • 《Vue》
    • 《React》
    • 《TypeScript 从零实现 axios》
    • 《Git》
    • TypeScript
    • JS设计模式总结
  • java
  • spring
  • springboot
  • springcloud
  • git
  • maven
  • nginx
  • tomcat
  • springmvc
  • jvm
  • 图数据库
  • mysql数据库
  • redis数据库
  • windows下docker安装nginx并挂载目录
  • linux命令
  • linux安装软件
  • linux脚本
  • idea
  • vscode
  • 归档
  • 综合项目

    • 若依项目
    • mall项目
  • java
  • mybatis
  • xxl-job
  • mybatis
GitHub (opens new window)

~chao

永远菜鸟,不断努力~
首页
  • vue

    • vue路由
  • 学习笔记

    • 《JavaScript教程》
    • 《JavaScript高级程序设计》
    • 《ES6 教程》
    • 《Vue》
    • 《React》
    • 《TypeScript 从零实现 axios》
    • 《Git》
    • TypeScript
    • JS设计模式总结
  • java
  • spring
  • springboot
  • springcloud
  • git
  • maven
  • nginx
  • tomcat
  • springmvc
  • jvm
  • 图数据库
  • mysql数据库
  • redis数据库
  • windows下docker安装nginx并挂载目录
  • linux命令
  • linux安装软件
  • linux脚本
  • idea
  • vscode
  • 归档
  • 综合项目

    • 若依项目
    • mall项目
  • java
  • mybatis
  • xxl-job
  • mybatis
GitHub (opens new window)
  • java

  • spring

  • springboot

  • springcloud

  • git

  • maven

  • nginx

  • tomcat

  • springmvc

  • jvm

    • JVM上篇-内存与垃圾回收篇

    • JVM中篇-字节码与类的加载篇

    • JVM下篇:性能监控与调优篇

      • 概述篇
      • JVM监控及诊断工具-命令行篇
      • JVM监控及诊断工具-GUI篇
      • JVM运行时参数
      • 分析GC日志
      • 浅堆深堆与内存泄露
      • 使用OQL语言查询对象信息
        • 1. SELECT 子句
        • 2. FROM 子句
        • 3. WHERE 子句
        • 4. 内置对象与方法
    • 个人总结

  • 正则表达式

  • 消息中间件

  • python

  • 后端
  • jvm
  • JVM下篇:性能监控与调优篇
~chao
2022-12-09
目录

使用OQL语言查询对象信息

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

转载来源:https://gitee.com/vectorx/NOTE_JVM

[toc]

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

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

# 1. SELECT 子句

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

SELECT * FROM java.util.Vector v
1

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

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

SELECT OBJECTS s.value FROM java.lang.String s
1
2
3

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

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

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

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

# 2. FROM 子句

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

SELECT * FROM java.lang.String s
1

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

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

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

select * from 0x37a0b4d
1

# 3. WHERE 子句

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

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

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

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

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

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

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

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

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

# 4. 内置对象与方法

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

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

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

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

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

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

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

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

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

select * from INSTANCEOF java.util.Vector
1
编辑 (opens new window)
上次更新: 2024/01/26, 05:03:22
浅堆深堆与内存泄露
jvm相关

← 浅堆深堆与内存泄露 jvm相关→

最近更新
01
python使用生成器读取大文件-500g
09-24
02
Windows环境下 Docker Desktop 安装 Nginx
04-10
03
使用nginx部署多个前端项目(三种方式)
04-10
更多文章>
Theme by Vdoing | Copyright © 2022-2024 chaos | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式