現(xiàn)在eden區(qū)分配嫂沉,如果Eden區(qū)沒有可放的空間則執(zhí)行新生代回收,一般新生代都是使用的是復(fù)制算法杏糙,則把存活的放在了survivor區(qū)搔啊,如果survivor區(qū)無法放下存活的對象北戏,則執(zhí)行分配擔保放在了老年代上。如果分配擔保失敗旧蛾,也就是說老年代無法放下了就會執(zhí)行老年代的垃圾回收。(注意:這里說的適用于Servial收集器锨天,不代表適用其他的收集器剃毒,其他的收集器可能在什么時候和怎么回收都會一些區(qū)別)
這其中有幾點需要注意的地方:
- 可以通過-XX:PretenureSizeThreshold參數(shù)來配置多大的對象就直接被分配到了老年代,不用再在新生代上來回折騰了
- 可以通過-XX:MaxTenuringThreshold參數(shù)來配置在年輕代經(jīng)過多少次回收后進入年老代益缠。這個配置默認是15次
- 虛擬機也不是說是要必須要達到XX:MaxTenuringThreshold配置的年齡才能被收入到老年代。如果說在survivor區(qū)相同年齡的對象大于該區(qū)域的一半大小的時候就被回收到老年代
- 通過HandlePromotionFailure參數(shù)來設(shè)置是否允許擔保失敗宋欺,就是在年輕代進行垃圾回收的時候會判斷目前存在年輕代中的對象是否都可以放在老年代上胰伍,如果可以的話就說明分配擔保是安全的,如果老年代上沒有這么多的空間放下年輕代所有的對象就會通過這個參數(shù)來判斷是否打開骂租,如果打開的話就會判斷老年代上連續(xù)的空間是否大于每次晉升老年代對象的平均值,如果大于則說明可以嘗試進行年輕代回收菩咨,如果小于則說明不允許冒險抽米。