GC新生代物件晉公升到老年代情況總結

2022-06-04 02:12:10 字數 689 閱讀 9370

物件優先在eden分配,且新生代物件晉公升到老年代有多種情況,

現在做乙個總結:

(1)、eden區滿時,進行minor gc,當eden和乙個survivor區中依然存活的物件無法放入到survivor中,則通過分配擔保機制提前轉移到老年代中。 

(2)、若物件體積太大, 新生代無法容納這個物件,-xx:pretenuresizethreshold即物件的大小大於此值, 就會繞過新生代, 直接在老年代分配, 此引數只對serial及parnew兩款收集器有效。

(3)、長期存活的物件將進入老年代。

虛擬機器對每個物件定義了乙個物件年齡(age)計數器。當年齡增加到一定的臨界值時,就會晉公升到老年代中,該臨界值由引數:-xx:maxtenuringthreshold來設定。

如果物件在eden出生並在第一次發生minorgc時仍然存活,並且能夠被survivor中所容納的話,則該物件會被移動到survivor中,並且設age=1;以後每經歷一次minor gc,該物件還存活的話age=age+1。

(4)、動態物件年齡判定。

虛擬機器並不總是要求物件的年齡必須達到maxtenuringthreshold才能晉公升到老年代,如果在survivor區中相同年齡(設年齡為age)的物件的所有大小之和超過survivor空間的一半,年齡大於或等於該年齡(age)的物件就可以直接進入老年代,無需等到maxtenuringthreshold中要求的年齡。

新生代的配置

引數 xmn可以用於設定新生代的大小。設定乙個較大的新生代大小會減少老年代的大小,此引數對系統效能以及gc影響很大。新生代的大小一般設定為整個堆空間的1 3到1 4左右。引數 xx survivorratio用來設定新生代中eden空間和from to空間的比例關係,如下 xx survivorra...

Young Gen新生代演算法

sun oracle 的 hotspot jvm 又把新生代進一步劃分為 3 個區域 1.乙個相對大點的區域,稱為 伊甸園區 eden 2.兩個相對小點的區域稱為 from 倖存區 survivor 和 to 倖存區 survivor 按照規定,新物件會首先分配在 eden 中 如果新物件過大,會直...

YGC前後新生代變大?

我們都知道gc是為了釋放記憶體,但是你是否碰到過ygc前後新生代反增不減的情況呢?gc日誌效果類似下面的 2016 05 18t15 06 13.011 0800 gc parnew promotion failed 636088k 690555k 707840k 0.2958900 secs cm...