Eclipse的MAT的支配树
學習 尚硅谷 宋紅康 JVM從入門到精通 的學習筆記
概念
MAT提供了一個稱為支配樹的對象圖.支配樹體現了對象實例之間的支配關系(支配關系就是我支配你, 你是我管轄的,你做什么都要先經過我,那么就是我支配你.).在對象的引用圖中,所有指向對象B的路徑都經過對象A,則認為對象A支配對象B.
如果對象A是離對象B最近的一個支配對象,就認為對象A為對象B的直接支配者.
比如說這個H,我要訪問H的話,必須要通過C,那么C就是支配者 ,F和G不是,因為你訪問H的時候,你可以不經過F,直接去經過G, 你訪問H的時候,你也可以不經過G,直接經過F.
支配樹是基于對象間的引用圖所建立的,有下面的基本性質:
- 對象A的子樹(所有被對象A支配(只有通過對象A才能訪問的到)的對象集合)表示對象A的保留集(retained set),即深堆.
- 如果對象A支配對象B,那么對象A的直接支配者也支配對象B,因為對象A支配對象B,那么說明要想經過對象B,就必須要走對象A的鏈路,那么如果有對象C是對象A的直接支配者,走鏈路只走對象A,那么這個對象C也是只走對象B
*支配樹的邊與對象引用圖的邊不直接對應的,
上圖所示:左邊圖標識對象引用圖,右邊圖標識左圖所對應的支配樹.對象A和B由根對象直接支配,由于在到對象C的路徑中,可以經過A,也可以經過B,因此對象C的直接支配者也是根對象.對象F與對象D互相引用,因為到對象F的所有路徑必然經過對象D,因此,對象D是對象F的直接支配者.而到對象D的所有路徑中,必然經過對象C,即使是從對象F到對象D的引用,從根節點觸發,也要經過對象C的,所以對象D的直接支配者為對象C.
同理,對象E支配對象G,到達對象Hd可以通過對象D,也可以通過對象E,因此對象D和E都不能支配對象H,而經過對象C既可以到達D也可以到達E,因此對象C為對象H的直接支配者.
注意:
跟隨我一起來理解如何從“對象引用圖—》支配樹”,首先需要理解支配者(如果要到達對象B,畢竟經過對象A,那么對象A就是對象B的支配者,可以想到支配者大于等于1),然后需要理解直接支配者(在支配者中距離對象B最近的對象A就是對象B的直接支配者,你要明白直接支配者不一定就是對象B的上一級,然后直接支配者只有一個),然后還需要理解支配樹是怎么畫的,其實支配樹中的對象與對象之間的關系就是直接支配關系,也就是上一級是下一級的直接支配者,只要按照這樣的方式來作圖,肯定能從“對象引用圖—》支配樹”
在Eclipse MAT工具中如何查看支配樹:
上圖中Object數組里面只有8個對象,原因是因為8個對象是這個Student對象自己獨有的,如果這個Student對象被垃圾回收了,那么支配樹下面的Object數組里面的8個對象也會被垃圾回收掉.
總結
以上是生活随笔為你收集整理的Eclipse的MAT的支配树的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: lync与ex集成之UM
- 下一篇: 寿命相关数据集