大多數情況下,物件優先在新生代Eden區域中分配。當Eden記憶體區域沒有足夠的空間進行分配時,虛擬機器將觸發一次 Minor GC(新生代GC)。 Minor GC期間虛擬機器將Eden區域的物件移動到其中一塊Survivor區域。
所謂大物件是指需要大量連續空間的物件。虛擬機器提供了一個XX:PretenureSizeThreshold參數,令大於這個值的物件直接在老年代中分配。
虛擬機採用分代收集的思想管理內存,那內存回收時就必須能識別那些對象該放到新生代,那些該到老年代中。為了做到這一點,虛擬機器為每個物件定義了一個物件年齡Age,每經過一次新生代GC後任然存活,將物件的年齡Age增加1歲,當年齡到一定程度(預設為15)時,將會被晉升到老年代中,物件晉升老年代的年齡限定值,可透過-XX:MaxTenuringThreshold來設定。
新生代GC(Minor GC):指發生在新生代的垃圾收集動作,因為對像大多都具備朝生夕滅特性,所以Minor GC非常頻繁,回收速度也比較快。
老年代GC(Major GC / Full GC):指發生在老年代中的GC,Major GC出現後,常伴隨至少一次的 Minor GC。 Major GC的速度通常會比Minor GC慢10倍以上。
以上就是Java虛擬機器學習 - 物件記憶體分配與回收的內容,更多相關內容請關注PHP中文網(www.php.cn)!
相關文章: