1. 程式人生 > >java 堆問題分析(未完)

java 堆問題分析(未完)

包含 兩個 間接引用 類型 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 堆問題分析(未完)