在Java的垃圾回收(Garbage Collection,GC)中,Minor GC和Full GC是两种不同类型的垃圾回收。
1. Minor GC:
发生在新生代(Young Generation)空间。新生代通常分为Eden区和两个Survivor区。
当对象被分配并存活时间较短时,它们会被分配到Eden区。Minor GC会清理Eden区和那些存活下来的对象,并将这些存活对象移动到Survivor区(通常是其中一个)。
Minor GC的频率比较高,因为大部分对象都是朝生夕死的。在一些情况下,Survivor区中的对象也会被移到老年代(Old Generation)。
2. Full GC:
发生在整个堆空间,包括新生代和老年代。
Full GC会收集整个堆空间中的垃圾对象,包括新生代和老年代。
与Minor GC不同,Full GC涉及更多的工作,因为它需要检查和清理整个堆空间,包括老年代,而不仅仅是新生代。
通常,Minor GC的发生频率要比Full GC高,因为大多数对象都是在新生代被分配的,并且很快变为不可达。而Full GC通常发生在以下情况下:
当老年代空间不足时,会触发Full GC来尝试释放内存,并清理整个堆空间。
由于JVM对垃圾回收机制的自主调整,以及系统负载或应用程序行为的影响,Full GC有时也会在周期性的时间间隔内发生,以确保系统的稳定性和性能。
Full GC通常比Minor GC耗时更长,因为它需要检查整个堆空间的对象,并进行更为彻底的清理。因此,尽量避免Full GC的频繁发生对于系统的性能是有益的。