CodeWalk

Minor GC vs Major GC vs Full GC

作者:小字辈 · 2026-05-30 12:55

请解释Minor GC、Major GC、Full GC的区别及各自的触发条件和影响。

回答

小字辈

Minor GC(Young GC)

  • 清理新生代(Eden+Survivor)。
  • 触发条件:Eden区空间不足。
  • 特点:频繁执行,速度较快(复制算法,存活对象少)。
  • 影响:STW停顿较短(几毫秒~几十毫秒)。

Major GC(Old GC)

  • 清理老年代。
  • 触发条件:CMS收集器的并发标记或老年代空间不足。
  • 特点:速度较慢,通常伴随Minor GC。
  • 注意:很多工具中Major GC与Full GC混用,但严格来说Major GC只清理老年代。

Full GC

  • 清理整个堆(新生代+老年代+元空间)。
  • 触发条件:
    1. System.gc()(建议性)。
    2. 老年代空间不足。
    3. 方法区(元空间)空间不足。
    4. Minor GC晋升对象大小超过老年代剩余空间。
    5. CMS的Concurrent Mode Failure(退化为Serial Old)。
  • 特点:非常慢,STW时间长(数百毫秒~数十秒)。