Java OQL(對象查詢語言)

  • 摘要:下面內容幾乎全部來自《深入理解java虛擬機》-周志明這本書的附錄D附錄D是作者翻譯自EclipseMemoryAnalyzerTool(MAT)的OQL幫助文檔我覺得對於分析內存使用情況查詢OutOfMemory原因,OQL會有很大幫助,所以先在這裏總結一下SELECT1.SELECT*FROMjava.lang.String2.SELECTtoString(s),s.count,s.valueFROMjava.lang.Strings3.SELECTtoString(s)
  • 下面內容幾乎全部來自《深入理解java虛擬機》 - 周志明 這本書的附錄D

    附錄D是作者翻譯自Eclipse Memory Analyzer Tool(MAT)的OQL幫助文檔

     

    我覺得對於分析內存使用情況查詢OutOfMemory原因,OQL會有很大幫助,所以先在這裏總結一下

     

    SELECT

    1.SELECT * FROM java.lang.String

    2.SELECT toString(s), s.count, s.value FROM java.lang.String s

    3.SELECT toString(s) AS Value,[email protected] AS "Shallow Size" FROM java.lang.String s

    (@爲屬性訪問器,可以使用AS起個別名)

    4.SELECT AS RETAINED SET * FROM java.lang.String

    (使用AS RETAINED SET 獲得與選擇對象相關聯的對象集合)

    5.SELECT OBJECTS dominators(s) FROM java.lang.String s

    (OBJECTS 關鍵字使得dominators 返回二維數組簡化爲一維對象列表)

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

    (DISTINCT 去重複)

     

     

    FROM

    1.SELECT * FROM "java/.lang/..*"

    (支持正則)

    2.SELECT * FROM java.lang.String

    3.SELECT * FROM 0xe14a100

    (根據對象在堆轉儲快照中的地址查詢)

    4.SELECT * FROM 3022

    (根據對象在堆轉儲快照中的地址ID)

    5.SELECT * FROM ( SELECT * FROM java.lang.Class c )

    6.SELECT * FROM ${snapshot}.getClasses()

    (使用屬性訪問器)

    7.SELECT * FROM INSTANCEOF java.lang.ref.Reference

    (INSTANCEOF 會把指定類的子類也查詢出來)

    8.SELECT * FROM OBJECTS java.lang.String

    (OBJECTS 禁止OQL把查詢範圍解釋爲對象實例,上述結果爲java.lang.String對應的Class)

     

     

    WHERE

    1.SELECT * FROM java.lang.String s WHERE s.count >= 100

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

    3.SELECT * FROM java.lang.String s WHERE s.value NOT IN dominators(s)

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

    5.SELECT * FROM java.lang.String s WHERE s.count 100 AND [email protected] > [email protected]

    6.SELECT * FROM java.lang.String s WHERE s.count > 1000 OR [email protected] >1000

    7.SELECT * FROM java.lang.String s WHERE (s.count > 1000) = true

                                                             WHERE toString(s) = "monday"

                                                             WHERE dominators(s).size() = 0

                                                             WHERE s.retainedHeapSize > 1024L

                                                             WHERE [email protected] != null

     

     

    屬性訪問器

    1.[<alias>.]<field>.<field>.……

    (訪問堆轉儲快照中對象的字段)

    2.[<alias>.]@<attribute>……

    (訪問java bean屬性)

    目標 接口 屬性 含義
    任意堆中的對象 Iobject objectId 快照中對象的ID
    objectAddress 快照中對象的地址
    Class 對象所屬的類
    usedHeapSize 對象的shallowSize
    retainedHeapSize 對象的retainedSize
    displayName 對象的顯示名稱
    類對象 Iclass classLoaderId 類加載器Id
    任意數組 Iarray length 數組的長度

     

    3.[<alias>.]@<方法>([<表達式>,<表達式>])……

    (調用OQL java方法,加“()”會令MAT解釋爲一個OQL java調用)

     

    常見的OQL java方法

    目標 接口 屬性 含義
    $snapshot Isnapshot getClasses() 獲取所有類的集合
    getClassesByName(String name,boolean includeSubClasses) 獲取指定類的集合
    Class object Iclass hasSuperClass() 如果對象有父類則返回true
    isArrayType() 如果Class是數組類型則返回true

     

    4.<function>(<parameter>)

    (OQL 內建函數)

    函數名稱 作用
    toHex(number) 以16進制的形式打印數字
    toString(object) 返回對象的值
    dominators(object) 返回直接持有指定對象的對象列表
    outbounds(object) 獲取對象的外部引用
    inbounds(object) 獲取對象的內部引用
    classof(object) 獲取對象所屬的類型對象
    dominatorof(object) 返回直接持有當前對象的對象列表,如果沒有,返回-1

     

    BNF範式

    以下內容來自百度百科

    巴科斯範式義同BNF範式(BNF: Backus-Naur Form 的縮寫)描述計算機語言語法的符號集
    1.在雙引號中的字("word")代表着這些字符本身。而double_quote用來代表雙引號。
    2.在雙引號外的字(有可能有下劃線)代表着語法部分。
    3.尖括號( < > )內包含的爲必選項。
    4.方括號( [ ] )內包含的爲可選項。
    5.大括號( { } )內包含的爲可重複0至無數次的項。
    6.豎線( | )表示在其左右兩邊任選一項,相當於"OR"的意思。
    7::= 是“被定義爲”的意思

     

    OQL語言的BNF範式

    (由於本人都不知道範式是啥能幹啥,所以先略過吧,等用到的時候再來補上)

     

     

     

    筆記如下

    其中“調用OQL java方法”由於我機器上的XMIND有個bug,所以無法正確輸入

    [<alias>.]@<方法>([<表達式>, <表達式>])……

    <表達式> 之間應該有逗號

 

 

 

轉載自https://www.aliyun.com/jiaocheng/299417.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章