1. 程式人生 > >深入理解Java虛擬機器--記憶體分配規則

深入理解Java虛擬機器--記憶體分配規則

新生代GC(Minor GC):指發生在新生代的垃圾回收動作,因此區域物件大多朝生夕死,所以Minor GC非常頻繁,一般回収速度也比較快

老年代GC(Major GC/Full GC):指發生在老年代的GC,出現Major GC,經常會伴隨至少一次的Minor GC(並非絕對),Major GC一般會比Minor GC慢10倍以上。

       1.物件優先分配在Eden,當Eden區沒有足夠的空間進行分配時,虛擬機器將發起一次Minor GC。

       2.大物件(需要大量連續空間)直接進入老年代

       3.長期存活的物件將進入老年代,JVM給每個物件定義了一個年齡計數器,若物件在Eden出生,經過第一次Minor GC後存活,並且能被Survivor容納,將被移動到Survivor區,並將年齡設為1,物件在Survivor區每熬過一次Minor GC,年齡就增加1,當他的年齡到一定程度(預設15歲),就被晉升到老年代。

       4.動態物件年齡判斷,若在Survivor空間中相同年齡所有物件大小的總和大於Survivor空間的一半,年齡大於等於改年齡的物件就可以直接進入老年代,無需等到MaxTenuringThreshold中要求的年齡。

       5.發生Minor GC時,虛擬機器會檢測之前每次晉升到老年代的平均大小是否大於老年代的剩餘空間,若大於,則改為一次Ful GC,若小於,則檢視HandlePromotionFailure設定是否允許擔保失敗,若允許,則只進行Minor GC,否則進行Full GC。