Minor GC(次要垃圾回收)是Java垃圾回收机制中的一种,专门针对新生代(Young Generation)的垃圾回收过程。它的主要作用是清理新生代中的无用对象,释放内存空间。

Minor GC 的特点

触发条件

  • 当新生代的Eden区空间不足时,会触发Minor GC;

  • 新对象通常先在Eden区分配,如果Eden区满了,就会触发Minor GC。

回收范围

  • Minor GC只清理新生代(包括Eden区和Survivor区),不会涉及老年代;

  • 如果老年代引用了新生代的对象,这些对象会被视为“存活对象”,不会被回收。

过程

  • 标记:首先标记出Eden区和Survivor区中所有存活的对象;

  • 复制:将存活的对象从Eden区和一个Survivor区(From区)复制到另一个Survivor区(To区);

  • 清理:清理Eden区和From区中的无用对象;

  • 晋升:如果某些对象在Survivor区中存活了多次(达到一定年龄阈值),它们会被晋升到老年代。

特点

  • Minor GC通常比较频繁,但执行速度快,因为新生代的空间相对较小;

  • 它是“停止-复制”(Stop-and-Copy)算法的一种实现,适合处理生命周期较短的对象。

Minor GC 与 Full GC 的区别

  • Minor GC:只清理新生代,速度快,频率高;

  • Full GC:清理整个堆(包括新生代和老年代),速度慢、频率低,通常发生在老年代空间不足或显式调用System.gc()时。