Minor GC/Young GC, Major GC/Old GC, MixedGC, Full GC
GC(Garbage Collection)
GC是指在编程语言中,自动回收不再被程序使用的内存空间的过程。在Java虚拟机(JVM)中,GC主要负责管理Java堆内存,Java堆是存储对象实例的内存区域。
GC的主要类型
Minor GC / Young GC
- 定义:Minor GC是指针对新生代(Young Generation)的垃圾回收过程。
- 运行条件:当新生代内存空间不足时,触发Minor GC。
- 回收对象:在新生代中,通常有伊甸区(Eden Space)和两个幸存者区(Survivor Space)。Minor GC主要回收伊甸区和幸存者区中的垃圾对象,并将存活的对象复制到幸存者区。
- 特点:Minor GC通常是比较频繁的、速度较快的垃圾回收过程。
Major GC / Old GC
- 定义:Major GC是指针对老年代(Old Generation)的垃圾回收过程。
- 运行条件:当老年代内存空间不足时,触发Major GC。
- 回收对象: Major GC主要回收老年代中的垃圾对象。
- 特点:Major GC相对于Minor GC来说,它的执行频率较低,因为老年代中的对象生命周期较长,不容易产生大量垃圾。
Mixed GC
- 定义:Mixed GC是一种同时处理新生代和老年代的垃圾回收过程。
- 运行条件:当新生代和老年代都触发垃圾回收时,为了提高效率,JVM可能会选择执行Mixed GC。
- 回收对象:Mixed GC同时回收新生代和老年代中的垃圾对象。
- 特点:Mixed GC的目的是优化GC的性能,减少垃圾回收的间隔时间。
Full GC
- 定义:Full GC是指对整个Java堆进行垃圾回收的过程。
- 运行条件:当整个Java堆内存空间不足时,触发Full GC。也有时候,某些情况下,Minor GC和Major GC都无法回收足够的内存时,会触发Full GC。
- 回收对象:Full GC会同时回收新生代和老年代中的垃圾对象,以及永久代(在Java 8及之前版本有,Java 8以后被元空间取代)中的无用类和常量等。
- 特点:Full GC是最耗时的垃圾回收过程,因为它需要扫描整个堆内存。