以下內容翻譯自MAT幫助文檔。
一、Class Histogram
Class Histogram shows the classes found in the snapshot, the number of objects for each class, the heap memory consumption of these??objects, and the minimum retained size of the objects
二、Dominator tree
Dominator tree shows for a particular object which other objects depend on it and will be garbage collected if that particular?object becomes unreachable.
三、Paths to GC roots
This view find objects responsible for keeping the selected object in the heap.
Componenet report?A heap dump contains many objects. But which of those belong to your component? And what conclusions can you draw from them??This is where the Component Report can help。
四、OQL
OQL is the build-in object query language. Learn to perform custom SQL-like queries on the heap dump in one minute.?classes as tables, objects as rows, and fields as columns。
1、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,s.@usedHeapSize 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 去重復)
7、查詢所有的異常對象SELECT * FROM INSTANCEOF java.lang.Exception exceptions
SELECT?exceptions.@displayName, exceptions.detailMessage.toString() FROM INSTANCEOF java.lang.Exception exceptions
2、OQL-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)
3、OQL-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?s.@retainedHeapSize?>?s.@usedHeapSize
6.SELECT * FROM java.lang.String s WHERE s.count > 1000 OR?s.value.@length?>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?s.@GCRootInfo?!= null
4、屬性訪問器
1.[.]..……
(訪問堆轉儲快照中對象的字段)
2.[.]@……
(訪問java bean屬性)
目標
接口
屬性
含義
任意堆中的對象
Iobject
objectId
快照中對象的ID
objectAddress
快照中對象的地址
Class
對象所屬的類
usedHeapSize
對象的shallowSize
retainedHeapSize
對象的retainedSize
displayName
對象的顯示名稱
類對象
Iclass
classLoaderId
類加載器Id
任意數組
Iarray
length
數組的長度
5、OQL 內建函數
.[.]@([,])……
(調用OQL java方法,加“()”會令MAT解釋為一個OQL java調用)
常見的OQL java方法
目標
接口
屬性
含義
$snapshot
Isnapshot
getClasses()
獲取所有類的集合
getClassesByName(String name,boolean includeSubClasses)
獲取指定類的集合
Class object
Iclass
hasSuperClass()
如果對象有父類則返回true
isArrayType()
如果Class是數組類型則返回true