java 對象的內存分配和回收

對象優先在Eden上分配

大多數情況下,對象優先在新生代Eden區域中分配。當Eden內存區域沒有足夠的空間進行分配時,虛擬機將觸發一次 Minor GC(新生代GC)。Minor GC期間虛擬機將Eden區域的對象移動到其中一塊Survivor區域。

大對象直接進入老年代

所謂大對象是指需要大量連續空間的對象。虛擬機提供了一個XX:PretenureSizeThreshold參數,令大於這個值的對象直接在老年代中分配。

長期存活的對象將進入老年代

虛擬機採用分代收集的思想管理內存,那內存回收時就必須能識別那些對象該放到新生代,那些該到老年代中。爲了做到這點,虛擬機爲每個對象定義了一個對象年齡Age,每經過一次新生代GC後任然存活,將對象的年齡Age增加1歲,當年齡到一定程度(默認爲15)時,將會被晉升到老年代中,對象晉升老年代的年齡限定值,可通過-XX:MaxTenuringThreshold來設置。

Minor GC 和Full GC區別

新生代GC(Minor GC):指發生在新生代的垃圾收集動作,因爲對象大多都具備朝生夕滅特性,所以Minor GC非常頻繁,回收速度也比較快。
老年代GC(Major GC / Full GC):指發生在老年代中的GC,出現Major GC後,經常會伴隨至少一次的 Minor GC。Major GC的速度一般會比Minor GC慢10倍以上。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章