Minor GC vs Major GC vs Full GC
请解释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:
- 清理整个堆(新生代+老年代+元空间)。
- 触发条件:
- System.gc()(建议性)。
- 老年代空间不足。
- 方法区(元空间)空间不足。
- Minor GC晋升对象大小超过老年代剩余空间。
- CMS的Concurrent Mode Failure(退化为Serial Old)。
- 特点:非常慢,STW时间长(数百毫秒~数十秒)。