新聞中心
概述
大家在用jvm診斷工具,比如Eclipse MAT或者 Jprofiler分析堆內(nèi)存的時(shí)候,都會(huì)看到一些概念或者關(guān)鍵詞,如Shallow Heap, Retained Heap, Dominator Tree等,你們知道他們是干嘛的嗎?

Eclipse MAT相關(guān)截圖:
jprofile相關(guān)截圖:
雖然上面兩個(gè)工具有點(diǎn)差異,但是他們表達(dá)的都是同一個(gè)意思。
淺堆(Shallow Heap、Shallow Size)
淺堆是指一個(gè)對象所消耗的內(nèi)存。在32位系統(tǒng)中,一個(gè)對象引用會(huì)占據(jù)4個(gè)字節(jié),一個(gè)int類型會(huì)占據(jù)4個(gè)字節(jié),long型變量會(huì)占據(jù)8個(gè)字節(jié),每個(gè)對象頭需要占用8個(gè)字節(jié)。根據(jù)堆快照格式不同,對象的大小可能會(huì)同8字節(jié)進(jìn)行對齊。
以jdk7中String為例:2個(gè)int值共占8字節(jié),對象引用占用4字節(jié),對象頭8字節(jié),合計(jì)20字節(jié),向8字節(jié)對齊,故占24字節(jié)。
|
int |
hash32 |
0 |
|
int |
hash |
0 |
|
ref |
value |
alvinalvinalvina |
這24字節(jié)為String對象的淺堆大小。它與String的value實(shí)際取值無關(guān),無論字符串長度如何,淺堆大小始終是24字節(jié)。
深堆(Retained Heap、Retained Size)
這里引入一個(gè)保留集(Retained Set)的概念,什么是保留集呢? 當(dāng)對象A被垃圾回收后,可以被釋放的所有的對象集合(包括對象A本身),即對象A的保留集可以被認(rèn)為是只能通過對象A被直接或間接訪問到的所有對象的集合。通俗地說,就是指僅被對象A所持有的對象的集合。
深堆是指對象的保留集中所有的對象的淺堆大小之和,也就是從堆中移除這個(gè)實(shí)例將釋放的內(nèi)存量。
注意: 淺堆指對象本身占用的內(nèi)存,不包括其內(nèi)部引用對象的大小。一個(gè)對象的深堆指只能通過該對象訪問到的(直接或間接)所有對象的淺堆之和,即對象被回收后,可以釋放的真實(shí)空間。
舉個(gè)例子:對象A引用了C和D,對象B引用了C和E。對象A的淺堆大小只是A本身,A的深堆大小為A與D之和,因?yàn)閷ο驝還可以被對象B訪問,所以不在對象A的深堆范圍之內(nèi)。那A的實(shí)際大小是多大呢?在日常開發(fā)中,A對象的實(shí)際大小是A,C,D相加的大小。 所以說,淺堆、深堆、實(shí)際大小都是不一樣的。
支配樹(Dominator Tree)
支配樹可以用來顯示堆轉(zhuǎn)儲(chǔ)中最大的對象。樹的下一層列出了如果刪除對父節(jié)點(diǎn)的所有傳入引用將被垃圾回收的對象。
支配樹是一個(gè)強(qiáng)大的工具,用于研究哪些對象保持哪些對象存活。同樣,可以根據(jù)類裝入器(例如組件)和包對樹進(jìn)行分組,以簡化分析。
那究竟什么是支配樹呢?
在對象引用圖中,所有指向?qū)ο驜的路徑都經(jīng)過對象A,則認(rèn)為對象A支配對象B。如果對象A是離對象B最近的一個(gè)支配對象,則認(rèn)為對象A為對象B的直接支配者。支配樹是基于對象間的引用圖所建立的。
舉個(gè)例子:
左圖表示對象引用圖,右圖表示左圖所對應(yīng)的支配樹。
- 對象A和B由根對象直接支配,由于在到對象C的路徑中,可以經(jīng)過A,也可以經(jīng)過B,因此對象C的直接支配者也是根對象。
- 對象F與對象D相互引用,因?yàn)榈綄ο驠的所有路徑必然經(jīng)過對象D,因此,對象D是對象F的直接支配者。
- 而到對象D的所有路徑中,必然經(jīng)過對象C,即使是從對象F到對象D的引用,從根節(jié)點(diǎn)出發(fā),也是經(jīng)過對象C的,所以,對象D的直接支配者為對象C。
- 同理,對象E支配對象G。到達(dá)對象H的可以通過對象D,也可以通過對象E,因此對象D和E都不能支配對象H。
- 經(jīng)過對象C既可以到達(dá)D也可以到達(dá)E,因此對象C為對象H的直接支配者。
總結(jié)
本文總結(jié)了jvm診斷工具比如jprofiler、eclipse mat等一些共通的概念,希望對大家有幫助。
文章題目:JVM診斷工具中的深堆、淺堆、支配樹,你都明白嗎
文章位置:http://www.dlmjj.cn/article/dpigspe.html


咨詢
建站咨詢
