年轻代每次minor gc之前jvm都要计算老年代剩余可用空间。
如果老年代剩余可用空间小于年轻代所有对象大小之和(包括垃圾对象)
就会看一个"-XX:HandlePromiotionFailure"参数是否设置了,如果有这个参数,就会看老年代可用空间大小,会否大于之前每一次minor gc后进入老年代的对象的平均大小。
如果小于或者或者参数没有配置,那就会触发full gc,对老年代和年轻代一起回收一次垃圾。如果回收完还是没有足够的空间存放对象就会发生oom。
当然,如果minor gc之后剩余存活的需要挪动到老年代的对象大小还是大于老年代可用空间,那么也会触发full gc,full gc完之后如果还是没有空间放minor gc之后的存活对象,则也会发生OOM