Java 虚拟机面试题, Java 中的 young GC,old GC,full GC 和 mixed GC 的区别是什么?
Java 虚拟机面试题, Java 中的 young GC,old GC,full GC 和 mixed GC 的区别是什么?
QA
Step 1
Q:: Java 虚拟机中,young GC、old GC、full GC 和 mixed GC 的区别是什么?
A:: 在 Java 虚拟机(JVM)中,垃圾回收器主要分为四种类型:
1. **Young GC**(也叫 Minor GC):
这是一种在新生代发生的垃圾回收,当新生代的对象无法再分配空间时,会触发 Young GC。新生代内存又分为 Eden 区和两个 Survivor 区。当对象在 Eden 区和 Survivor 区之间移动时,如果一个对象存活下来并且经过了多次的 GC 后,会被移到老年代。
2. **Old GC**(也叫 Major GC):
这是一种只针对老年代的垃圾回收。当老年代空间不足时会触发 Old GC。相比 Young GC,Old GC 的频率较低但回收时间更长。
3. **Full GC**: Full GC 会回收整个堆空间(包括年轻代和老年代),因此它的回收时间最长。Full GC 通常是在内存不足、持久代溢出、系统显式调用 System.gc()
方法等情况下触发。
4. **Mixed GC**: 这是一种在 G1
垃圾回收器中特有的 GC 类型,它会同时回收年轻代和部分老年代的内存。Mixed GC 是为了尽量避免 Full GC 的发生,提高垃圾回收的效率。
Step 2
Q:: 为什么 Java 要引入多种垃圾回收机制?
A:: Java 引入多种垃圾回收机制的主要原因是为了在不同的应用场景中平衡系统的吞吐量和延迟。每种 GC 类型都针对特定的内存区域和需求进行优化,从而能够适应不同的工作负载。例如,Young GC 频繁但回收速度快,适用于短生命周期的对象,而 Old GC 和 Full GC 虽然较少触发,但适用于长生命周期的对象,能够释放大量内存。Mixed GC 则在 G1
垃圾回收器中用于平衡年轻代和老年代的回收需求,减少长时间停顿的概率。