物件優先在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...