首页 > 其他分享 >VisualVM 的 OQL 的一些例子

VisualVM 的 OQL 的一些例子

时间:2023-07-12 20:32:07浏览次数:35  
标签:lang OQL java -- 对象 例子 heap VisualVM select

Visual VM的OQL语言是对HeapDump进行查询,类似于SQL的查询语言,它的基本语法如下:

select <JavaScript expression to select>
[ from [instanceof] <class name> <identifier>
[ where <JavaScript boolean expression to filter> ] ]

OQL由3个部分组成:select子句、from子句和where子句。select子句指定查询结果要显示的内容。from子句指定查询范围,可指定类名,如java.lang.String、char[]、[Ljava.io.File;(File数组)。where子句用于指定查询条件。

一些例子

字符串的长度大于等于 100 的实例

select s
from java.lang.String s
where s.value.length >= 100

VisualVM 的 OQL 的一些例子_迭代

选取长度大于等于256的int数组。

select s
from int[] s
where s.length >= 256

显示所有文件对象的文件路径

select file.path.value.toString()
from java.io.File file

VisualVM 的 OQL 的一些例子_java_02

显示所有ClassLoader的类名

select classof(cl).name
from instanceof java.lang.ClassLoader cl

VisualVM 的 OQL 的一些例子_java_03

 

查找包含内容最多的List

这个应该是查找内存泄露的好语句

select map(top(heap.objects('java.util.ArrayList'), 'rhs.size - lhs.size', 5),"toHtml(it)+'='+it.size")

VisualVM 的 OQL 的一些例子_迭代_04

 

 

通过引用查询对象

select o from instanceof 0xd404d404 o

heap 对象

heap.findClass(class name) -- 找到类


select heap.findClass("java.lang.String").superclass

heap.findObject(object id) -- 找到对象


select heap.findObject("0xd404d404")

heap.classes -- 所有类的枚举

select heap.classes

heap.objects -- 所有对象的枚举

select heap.objects("java.lang.String")

heap.finalizables -- 等待垃圾收集的java对象的枚举

select heap.finalizables

heap.livepaths -- 某一对象存活路径

select heap.livepaths(s) from java.lang.String s

 

 

辨识对象的函数

classof(class name) -- 返回java对象的类对象


select classof(cl).name from instanceof java.lang.ClassLoader cl

identical(object1,object2) -- 返回是否两个对象是同一个实例


select identical(heap.findClass("java.lang.String").name, heap.findClass("java.lang.String").name)

objectid(object) -- 返回对象的id


select objectid(s) from java.lang.String s

reachables -- 返回可从对象可到达的对象


select reachables(p) from java.util.Properties p      -- 查询从Properties对象可到达的对象
select reachables(u, "java.net.URL.handler") from java.net.URL u -- 查询从URL对象可到达的对象,但不包括从URL.handler可到达的对象

referrers(object) -- 返回引用某一对象的对象


select referrers(s) from java.lang.String s where s.count > 100

referees(object) -- 返回某一对象引用的对象


select referees(s) from java.lang.String s where s.count > 100

refers(object1,object2) -- 返回是否第一个对象引用第二个对象

select refers(heap.findObject("0xd4d4d4d4"),heap.findObject("0xe4e4e4e4"))

root(object) -- 返回是否对象是根集的成员

select root(heap.findObject("0xd4d4d4d4"))

sizeof(object) -- 返回对象的大小

select sizeof(o) from [I o

toHtml(object) -- 返回对象的html格式

select "<b>" + toHtml(o) + "</b>" from java.lang.Object o

选择多值

select {name:t.name?t.name.toString():"null",thread:t} from instanceof java.lang.Thread t

 

 

数组、迭代器等函数

concat(enumeration1,enumeration2) -- 将数组或枚举进行连接


select concat(referrers(p),referrers(p)) from java.util.Properties p

contains(array, expression) -- 数组中元素是否满足某表达式


select p from java.util.Properties where contains(referres(p), "classof(it).name == 'java.lang.Class'")
返回由java.lang.Class引用的java.util.Properties对象
built-in变量
it -- 当前的迭代元素
index -- 当前迭代元素的索引
array -- 被迭代的数组

count(array, expression) -- 满足某一条件的元素的数量

select count(heap.classes(), "/java.io./(it.name)")

filter(array, expression) -- 过滤出满足某一条件的元素


select filter(heap.classes(), "/java.io./(it.name)")

length(array) -- 返回数组长度

select length(heap.classes())

map(array,expression) -- 根据表达式对数组中的元素进行转换映射


select map(heap.classes(),"index + '-->' + toHtml(it)")

max(array,expression) -- 最大值, min(array,expression)

select max(heap.objects("java.lang.String"),"lhs.count>rhs.count")    
built-in变量    
lhs -- 左边元素    
rhs -- 右边元素

sort(array,expression) -- 排序


select sort(heap.objects('[C'),'sizeof(lhs)-sizeof(rhs)')

sum(array,expression) -- 求和

select sum(heap.objects('[C'),'sizeof(it)')

toArray(array) -- 返回数组

unique(array) -- 唯一化数组

 

 

 

参考:

http://book.51cto.com/art/201504/472224.htm

http://visualvm.java.net/oqlhelp.html 

http://www.iteye.com/topic/1125255


标签:lang,OQL,java,--,对象,例子,heap,VisualVM,select
From: https://blog.51cto.com/u_15588078/6703668

相关文章

  • 51单片机-跑马灯例子
    #include"reg52.h"#include"intrins.h"#include<stdio.h>typedefunsignedintu16;typedefunsignedcharu8;typedefunsignedintuint;typedefunsignedcharuchar;#defineLED_PORTP2#defineSMG_A_DP_PORTP0u8gsmg_code[17]......
  • wpf的动态Tab的例子,使用Prism
    引用Prism.Core,Prism.Wpf和Prism.Unity修改App.xaml的类型替换为 PrismApplication 修改App.xaml.cs:///<summary>///InteractionlogicforApp.xaml///</summary>publicpartialclassApp:PrismApplication{protectedoverride......
  • 粒子群算法PSO优化LSSVM最小二乘支持向量机惩罚参数c和核函数参数g,用于回归预测,有例子
    粒子群算法PSO优化LSSVM最小二乘支持向量机惩罚参数c和核函数参数g,用于回归预测,有例子,易上手,简单粗暴,直接替换数据即可。仅适应于windows系统。质量保证,完美运行。这段程序主要是一个基于粒子群优化算法(ParticleSwarmOptimization,PSO)的支持向量机(SupportVectorMachine,SVM)......
  • JVM系列---【jvisualvm安装Visual GC插件】
    jvisualvm安装VisualGC插件离线安装1.下载VisualGC插件地址:https://visualvm.github.io/uc/8u131/updates.html点击自动下载2.打开jvisualvm3.打开插件4.选中下载好的插件,并安装......
  • 上传的文件需进行内容验证或者直接解析的例子
    特点就是:在form_valid验证中,完成数据的验证或者解析urls.pyfromdjango.urlsimportpathfrom.viewsimportUploadViewurlpatterns=[path('',UploadView.as_view(),name='index'),] forms.pyfromdjangoimportformsfromdjango.core.validat......
  • node restAPI 简单例子
      //第一版,node的httpp//consthttp=require('http');//constserver=http.createServer((req,res)=>{//if(req.url==='/'){//res.write('helloworld')//res.end();//}//if(req.url==='......
  • mac m1 安装java性能监控工具VisualVM 2.1
    macm1安装java性能监控工具VisualVM2.1.6背景本地已经安装了java8,在终端输入jvisualvm提示没有安装benjie@benjiedeMBP~%jvisualvmTheoperationcouldn’tbecompleted.UnabletolocateaJavaRuntimethatsupportsjvisualvm.Pleasevisithttp://www.java.com......
  • 一个sqlite的例子,将图片存入sqlite数据库
          最近学习sqlite,在看了一些资料后,写了一个例子,可能对初学sqlite或者学习将图片插入数据库等的有用,把源码发出来,给需要参考的。也欢迎大家提出建议。         包含常用的sql操作,增删改查,同时也在例子中说明,sqlit的sql语句使用参数,可以用@也可以用$。     ......
  • FreeMarker HelloWorld 一个例子
    FreeMarker是开源的模板框架主页:http://www.freemarker.org/ 现在我们就开始我们的FreeMarker版的HelloWorld之旅吧。1.下载最新的freemarkerjar包FreeMarkerhttp://cznic.dl.sourceforge.net/project/freemarker/freemarker/2.3.20/freemarker-gae-2.3.20.jar2.解压你下载的......
  • Java annotation java注解入门例子 及讨论
    第一部分:了解一下java1.5起默认的三个annotation类型:@Override:只能用在方法之上的,用来告诉别人这一个方法是改写父类的。@Deprecated:建议别人不要使用旧的API的时候用的,编译的时候会用产生警告信息,可以设定在程序里的所有的元素上. @SuppressWarnings:这一个类型可以来......