年輕代每次minor GC之前JVM都會計算下老年代剩餘可用空間
如果這個可用空間小於年輕代裏現有的所有對象大小之和( 包括垃圾對象 )
就會看一下“-XX:-HandlePromotionFailure”( jdk1.8默認就設置了 )的參數是否設置了。
如果有這個參數,就會看看老年代的可用內存大小,是否大於之前每一次minor GC後進入老年代的對象的平均大小。
如果上一步結果是小於或者之前說的參數沒有設置,那麼就會觸發一次Full GC,對老年代和年輕代一起回收一次垃圾,如果回收完還是沒有足夠空間存放新的對象就會發生"OOM"。
當然,如果minor GC之後剩餘存活的需要挪動到老年代的對象大小還是大於老年