zoukankan      html  css  js  c++  java
  • OQL对象查询语言

         在用mat工具分析内存使用情况查询OutOfMemory原因时,OQL会有很大帮助,所以先在这里总结一下。

    基本语法: 
    select <javascript expression to select>
    [from [instanceof] <class name> <identifier>]
    [where <javascript boolean expression to filter>]

    select * from com.XXX.CacheManager

    解释:
    (1)class name是java类的完全限定名,如:java.lang.String, java.util.ArrayList, [C是char数组, [Ljava.io.File是java.io.File[]
    (2)类的完全限定名不足以唯一的辨识一个类,因为不同的ClassLoader载入的相同的类,它们在jvm中是不同类型的
    (3)instanceof表示也查询某一个类的子类,如果不明确instanceof,则只精确查询class name指定的类
    (4)from和where子句都是可选的
    (5)java域表示:obj.field_name;java数组表示:array[index]

    举例:

    (1)查询长度大于100的字符串 select s from java.lang.String s where s.count > 100

        select * from java.util.concurrent.linkedBlockingQueue t where (t.count.value>0)

    (2)查询长度大于256的数组 select a from [I a where a.length > 256

    (3)显示匹配某一正则表达式的字符串 select a.value.toString() from java.lang.String s where /java/(s.value.toString())

    (4)显示所有文件对象的文件路径 select file.path.value.toString() from java.io.File file

    (5)显示所有ClassLoader的类名 select classof(cl).name from instanceof java.lang.ClassLoader cl

    (6)通过引用查询对象 select o from instanceof 0xd404d404 o
    built-in对象 -- heap

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

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

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

       select heap.findObject("0xd404d404")

    (3)heap.classes -- 所有类的枚举

       select heap.classes

    (4)heap.objects -- 所有对象的枚举

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

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

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

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

    (7)heap.roots -- 堆根集的枚举

  • 相关阅读:
    AngularJS自定义表单验证器
    AngularJS自定义表单验证
    DataTables自定义筛选器
    DataTables列过滤器
    DataTables语言国际化
    DataTables DOM定位
    DataTables自定义事件
    DataTables给表格绑定事件
    自定义Celery任务记录器
    celery 日志设置
  • 原文地址:https://www.cnblogs.com/moonandstar08/p/5052581.html
Copyright © 2011-2022 走看看