天天看點

java對象在堆記憶體中的配置設定原則

1、對象優先配置設定在Eden區,如果Eden區沒有足夠的空間時,虛拟機執行一次Minor GC。

2、大對象直接進入老年代(大對象是指需要大量連續記憶體空間的對象)。這樣做的目的是避免在Eden區和兩個

Survivor區之間發生大量的記憶體拷貝(新生代采用複制算法收集記憶體)。

3、長期存活的對象進入老年代。虛拟機為每個對象定義了一個年齡計數器,如果對象經過了1次Minor GC那麼對象會進入Survivor區,之後每經過一次Minor GC那麼對象的年齡加1,知道達到閥值對象進入老年區。

4、動态判斷對象的年齡。如果Survivor區中相同年齡的所有對象大小的總和大于Survivor空間的一半,年齡大于或等于該年齡的對象可以直接進入老年代。

5、空間配置設定擔保。每次進行Minor GC時,JVM會計算Survivor區移至老年區的對象的平均大小,如果這個值大于老年區的剩餘值大小則進行一次Full GC,如果小于檢查HandlePromotionFailure設定,如果true則隻進行Monitor GC,如果false則進行Full GC。

繼續閱讀