JVM性能调优-FullGC与Minor的区别频繁FullGC问题分析

2019-12-19 21:14:40 浏览数 (2)

简介: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时间

0 人点赞