简介:FullGC与MinorGC讲解
Minor GC触发条件
当Eden区满时,触发Minor GC
FullGC触发条件
- 调⽤
System.gc()
此⽅法的调⽤是建议 JVM 进⾏ Full GC,虽然只是建议⽽⾮⼀定,但很多情况下它会触发 Full GC。因此强烈建议能不使⽤此⽅法就不要使⽤,让虚拟机⾃⼰去管理它的内存。可通过-XX: DisableExplicitGC
来禁⽌ RMI 调⽤System.gc()
- ⽼年代空间不⾜ ⽼年代空间不⾜的常⻅场景为前⽂所讲的⼤对象直接进⼊⽼年代、⻓期存活的对象进⼊⽼年代等,当执⾏ Full GC 后空间仍然不⾜,则抛出
Java.lang.OutOfMemoryError
。为避免以上原因引起的 Full GC,调优时应尽量做到让对象在 Minor GC 阶段被回收、让对象在新⽣代多存活⼀段时间以及不要创建过⼤的对象及数组 - 空间分配担保失败 使⽤复制算法的 Minor GC 需要⽼年代的内存空间作担保,如果出现
HandlePromotionFailure
担保失败,则会触发 Full GC
项⽬中出现频繁FullGC,也就是系统空间分配不⾜导致的系统堆内存强制回收
- 由于本机单服务内存过⼤导致,此场景下Full GC,⽽且需要回收的内存很⼤,持续时间过⻓
- 解决停顿时间过⻓问题,缩短GC时间