java 堆問題分析(未完)
阿新 • • 發佈:2017-12-05
包含 兩個 間接引用 類型 blog 對象大小 技術 obj 分析
一 shallow heap 和 retained heap的區別
1 shallow size
是對象本身占據的內存的大小,不包含其引用的對象。對於常規對象(非數組)的shadow size由其成員變量的數量和類型來定,而數組的shallow size則是數組元素大小的總和。
2 retained size
Retained Size=當前對象大小 + 當前對象可直接或間接引用到的對象的大小總和。(間接引用的含義:A->B->C,C就是間接引用) ,並且排除被GC Roots直接或者間接引用的對象
換句話說,Retained Size就是當前對象被GC後,從Heap上總共能釋放掉的內存。 不過,釋放的時候還要排除被GC Roots直接或間接引用的對象。他們暫時不會被被當做Garbage。
GC Roots直接引用了A和B兩個對象。
A對象的Retained Size=A對象的Shallow Size
B對象的Retained Size=B對象的Shallow Size + C對象的Shallow Size
栗子??
上圖中obj1的retained size為obj1、obj2、obj4的shallow size總和,並不包括obj3的shallow size,因為obj3被Gc Roots引用了,也就是說obj3除了被obj2引用,還有其他外部引用。
上圖中obj1的retained size為obj1、obj2、obj3、obj4的shallow size總和,因為obj3除了被obj2引用,沒有其他外部引用。
摘自: http://blog.csdn.net/a740169405/article/details/53610689
java 堆問題分析(未完)