程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> JAVA綜合教程 >> JAVA Shallow heap & Retained heap,javashallowheap

JAVA Shallow heap & Retained heap,javashallowheap

編輯:JAVA綜合教程

JAVA Shallow heap & Retained heap,javashallowheap


最近在研究內存洩漏的問題,在使用MAT工具中發現了Shallow heap & Retained heap,不懂。

然後在網上找了一些資料。

 

Shallow Size 
對象自身占用的內存大小,不包括它引用的對象。 
針對非數組類型的對象,它的大小就是對象與它所有的成員變量大小的總和。當然這裡面還會包括一些java語言特性的數據存儲單元。 
針對數組類型的對象,它的大小是數組元素對象的大小總和。 

Retained Size 
Retained Size=當前對象大小+當前對象可直接或間接引用到的對象的大小總和。(間接引用的含義:A->B->C, C就是間接引用) 
換句話說,Retained Size就是當前對象被GC後,從Heap上總共能釋放掉的內存。 
不過,釋放的時候還要排除被GC Roots直接或間接引用的對象。他們暫時不會被被當做Garbage。 

看圖理解Retained Size 

 

上圖中,GC Roots直接引用了A和B兩個對象。 

A對象的Retained Size=A對象的Shallow Size 
B對象的Retained Size=B對象的Shallow Size + C對象的Shallow Size 

這裡不包括D對象,因為D對象被GC Roots直接引用。 
如果GC Roots不引用D對象呢? 

 


此時, 
B對象的Retained Size=B對象的Shallow Size + C對象的Shallow Size + D對象的Shallow Size

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved