shallow heap與remainder heap

 

具有Heap Profiler功能的工具,如mat(memory analyse tool)、Google Heap Profiler、JProfiler等,經常會出現shallow heap與remainder heap,這兩個詞在我們的實際開發中基本沒有出現過,那麼我們在用mat解析dump出來的Java內存文件時,出現的這兩個詞究竟是什麼意思呢?

shallow heap

shallow heap是對象本身的大小,不包括其引用的對象。
對於非數組類型:shallow heap就是對象與其成員變量加在一起的大小。
對於數組類型:shallow heap就是數組各個元素大小之和。

remainder heap

對象remainder heap 大小 = 對象shallow heap大小 + 對象直接或者間接引用的對象大小(排除被GC ROOT直接引用的對象)。
如下圖所示:

 


 
對象引用關係

OBJECT A的remainder heap = OBJECT A的shallow heap
OBJECT B的remainder heap = OBJECT B的shallow heap + OBJECT C的對象大小 + OBJECT E的對象大小

所以對象的remainder heap其實接近進行垃圾回收時,清除該對象時所能獲取的堆內存大小(有的對象可能還被其他對象引用,垃圾回收時,不能清除)。

下面是用mat對從服務器上面dump出來Java虛擬機內存進行解析之後的結果:


 

 

Java內存解析結果

其中,Objects爲類的對象的個數。Shallow Heap是這些對象自身大小之和,Remainder Heap是這些對象自身以及這些對象直接或者間接引用的對象大小總和。



作者:哪個旮旯的
鏈接:https://www.jianshu.com/p/def81f647ece
來源:簡書
著作權歸作者所有。商業轉載請聯繫作者獲得授權,非商業轉載請註明出處。

 

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