跳到主要内容

简述Minor GC与Full GC分别在什么时候发生 ?

参考答案:

Minor GC(也称为Young GC)和Full GC是Java虚拟机(JVM)中的两种垃圾收集(GC)类型,它们在不同的条件下发生。

Minor GC发生在新生代(Young Generation)空间,主要是清理新创建的对象。当新生代中的Eden区满了,或者新创建的对象大小超过了Eden区剩余的空间时,就会触发Minor GC。此外,CMS(Concurrent Mark Sweep)垃圾收集器在CMS的Remark阶段之前,也会先进行一次Minor GC以清理新生代,从而加速之后的Remark阶段。Minor GC会清理Eden区和Survivor区中的不再存活的对象,并将存活的对象移动到另一个Survivor区,或者如果对象已经存活了一段时间,它们可能会被移动到老年代(Old Generation)。

Full GC发生在整个堆空间,包括新生代和老年代。当老年代空间不足,或者CMS收集器需要清理整个堆空间以进行压缩时,就会触发Full GC。Full GC会收集整个堆空间中的垃圾对象,包括新生代和老年代。Full GC通常比Minor GC更耗时,因为它需要处理更多的对象,并且可能需要暂停应用程序的执行(即“stop-the-world”事件)。

总的来说,Minor GC主要关注新生代的垃圾回收,而Full GC则关注整个堆空间的垃圾回收。Minor GC的频率通常比Full GC高,因为大部分对象的生命周期都比较短。