Minor GC、Major GC 和 Full GC区别?
Minor GC、Major GC和Full GC是垃圾回收中的三个重要概念,它们描述了垃圾回收的不同阶段和范围:
- Minor GC(新生代GC):
- Minor GC主要关注清理年轻代(Young Generation)的内存区域。
- 年轻代通常分为三个部分:Eden区和两个Survivor区(通常是S0和S1)。
- 在Minor GC过程中,首先会进行Eden区的垃圾回收,存活的对象将会被移动到其中一个Survivor区。之后,再清理Eden区和另一个Survivor区。这个过程会使得年轻代中的对象晋升到老年代(Old Generation)。
- Minor GC通常发生频繁,但它的停顿时间相对较短。
- Major GC(老年代GC):
- Major GC主要关注清理老年代的内存区域。
- 触发Major GC的条件包括老年代空间不足,永久代(在Java 8及之前的版本)或Metaspace空间不足等。
- Major GC的执行可能伴随较长的停顿时间,因为它需要整理老年代的内存,移动对象以减少碎片化。
- Full GC(完全GC):
- Full GC是对整个堆内存(包括年轻代、老年代、永久代或Metaspace等)进行清理的一种垃圾回收操作,它是Major GC的一种特殊情况。
- 触发Full GC的条件可能包括老年代空间不足、永久代/Metaspace空间不足、显式调用