minor GC、major GC以及full GC区别

Minor GC:

  • 作用范围:只针对新生代进行垃圾回收,包括Eden区和Survivor区
  • 触发条件:当Eden区满时触发,将Eden区和一个Survivor区中的存活对象移动到另一个Survivor区或老年代
  • 特点:通常发生的非常频繁,因为新生代中对象的生命周期较短,Minor GC的停顿时间相对较短

Major GC:

  • 作用范围:主要针对老年代进行垃圾回收,但有时也会涉及新生代
  • 触发条件:当老年代空间不足时触发,或者当某些对象在新生代经过多次GC后仍然存活时晋升到老年代
  • 特点:发生频率比Minor GC第,但是时间长

Full GC:

  • 作用范围:针对整个Java堆进行垃圾回收,包括新生代、老年代以及方法区(永久代/元空间)
  • 触发条件:
    • 直接调用System.gc()Runtime.getRuntime().gc()
    • Minor GC时,如果存活对象无法全部放入老年代,或者老年代空间不足以容纳新生代晋升的对象时
    • 当永久代或元空间满时
  • 特点:停顿时间最长,可能会导致应用性能下降,因此应尽量避免频繁触发Full GC,合理配置堆内存和垃圾回收器参数以减少Full GC的发生频率