GC新生代對象晉升到老年代情況總結

對象優先在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中要求的年齡。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章