解释一下什么是Young GC和Full GC?
1、Minor GC / Young GC
Minor GC / Young GC,这个非常好理解,新生代”也可以称之为“年轻代”,这两个名词是等价的。那么在年轻代中的Eden内存区域被占满之后,实际上就需要触发年轻代的gc,或者是新生代的gc
此时这个新生代gc,其实就是所谓的“Minor GC”,也可以称之为“Young GC”,这两个名词,相信大家就理解了,说白了,就专门针对新生代的gc。
2、Full GC?Old GC?傻傻分不清楚
在 JVM 中,Old GC(Old Generation Garbage Collection)是指对老年代(Old Generation)内存区域进行的垃圾收集。老年代主要存放生命周期较长、从新生代晋升的对象。Old GC 的主要目标是回收老年代中不再使用的对象,以释放内存空间。
3、Full GC
对于Full GC,其实这里有一个更加合适的说法,就是说Full GC指的是针对新生代、老年代、永久代的全体内存空间的垃圾回收,所以称之为Full GC。
4、Major GC
触发条件:当老年代内存空间不足时会触发 Major GC。这通常是因为对象从新生代晋升到老年代后,老年代的可用空间不足以容纳更多对象。
目标:清理老年代的垃圾对象,回收老年代的内存空间。
影响:Major GC 通常会对应用程序性能产生较大影响,因为它会导致所有线程暂停(Stop-the-World,STW),暂停时间通常较长,具体取决于堆的大小和垃圾收集算法。
5、Mixed GC
触发条件:Mixed GC 发生在 G1 垃圾收集器的某些条件满足时,特别是当老年代的占用达到某个阈值(默认为堆内存的 45%)时。
目标:除了收集新生代的垃圾对象外,还会选择性地收集老年代的一部分垃圾对象。G1 会优先选择那些含有最多垃圾对象的老年代区域(Regions),以最大化每次垃圾收集的效率。
过程:
初始标记(Initial Mark):标记从根对象直接可达的对象,此过程会触发一个短暂的全局暂停(STW)。
并发标记(Concurrent Mark):在应用程序运行时并发执行,标记老年代中的存活对象。
最终标记(Final Mark):完成标记过程,这也会触发一个短暂的全局暂停。
筛选回收(Cleanup):根据标记结果确定哪些老年代区域需要回收。
混合垃圾收集(Mixed GC):同时回收新生代和部分老年代区域。