內存分析工具(MAT)介紹(二)-mat主要概念

  介紹MAT的一些操作前先明確幾個概念。

Shallow VS. Retained Heap

  Shallow Heap是一個對象佔用的堆內存。主要從以下幾個值計算:一個引用佔用4個字節或者8個字節(操作系統不一樣決定)、一個int佔用4個字節、一個long佔用8個字節、一個shot佔用2個字節、一個數組佔用size * 每個元素佔用字節… 這些是大概的估算,因爲要考慮字節對齊。例如:public class A { private int dataA; private Object[] arrayInt = new Object[3]; }
A這個類的對象本身佔用 4 + 4*3 = 12堆空間(假設不考慮字節對齊、引用佔用4個字節)。
  一個對象X的Retained Set是指因對象X被垃圾回收而被回收的對象集合。說白了就是這些對象只被對象X引用或者只被對象X間接引用。如下圖描述了一些對象的引用關係
對象引用關係
X的Retained Set是X、E、F和對象G;C、D不屬於X的Retained Set因爲C還被A引用,D還被C引用。
  一個對象X的Retained Heap就是對象X以及X的Retained Set對象佔用的堆空間。在上面例子中X、E、F和對象G佔用的空間就是X的Retained Heap。

dominator tree(控制樹)

  對象X控制(dominates)對象Y是指從GC Root對象到達對象Y的所有路徑一定經過對象X,對象X稱爲對象Y的控制者(dominator)。如果是對象X是距離對象Y最近的控制者,則稱爲immediate dominator。控制關係存在傳遞性,即如果X控制Y且Y控制Z,則X一定控制Z。

  控制樹(dominator tree)就是描述對象控制關係的樹形圖。X的控制子樹實際上就是X的Retained Set。還是以上面的引用關係圖爲例。X的控制子樹如下圖:
X的控制子樹
X不是D和C的dominator,因爲C、D有不經過X的路徑到達,GC ROOT從A這條路徑不經過X。
  下節介紹MAT的直方圖

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