JDK版本默认垃圾收集器:
- jdk1.7 默认垃圾收集器Parallel Scavenge(新生代)+Serial Old(老年代)
- jdk1.8 默认垃圾收集器Parallel Scavenge(新生代)+Serial Old(老年代)
垃圾收集器Parallel Scavenge:
- 新生代采用复制算法
- 老年代采用标记-整理算法
jvm默认启用空间分配担保:-XX:+HandlePromotionFailure
跟复制算法有关,如果不了解复制算法请先去了解一下
大致理解:因为eden区容纳不下接下来对象B所需内存的大小,虚拟机将发起一次 Minor GC,GC期间虚拟机又发现之前的对象A无法存入 Survivor 空间,所以只好通过分配担保机制把新生代的对象A提前转移到老年代中去,老年代有足够的内存存放,所以不会出现 Full GC。
如果禁止了空间分配担保,或者老年代内存空间不足,则会发起一次FULL GC