JVM的默认垃圾收集器是哪个?
参考回答
JVM 默认的垃圾收集器取决于 JDK 版本和运行的环境:
- JDK 8 及之前版本:默认垃圾收集器是 Parallel GC(并行垃圾回收器)。它是为了提高多核 CPU 系统的吞吐量而设计的,并且使用多个线程进行垃圾回收,以加速回收过程。
-
JDK 9 到 JDK 11:默认垃圾收集器仍然是 Parallel GC,但在这些版本中,JVM 引入了更多的回收器选项。
-
JDK 12 及之后版本:默认垃圾收集器改为 G1 GC(Garbage-First)。G1 GC 是一种以低停顿为目标的垃圾回收器,适合大内存系统和低延迟应用。
总结:JDK 12 及之后版本的默认垃圾收集器是 G1 GC,而 JDK 8 及之前版本的默认垃圾收集器是 Parallel GC。
详细讲解与拓展
- Parallel GC:
- 在 JDK 8 及之前的版本中,Parallel GC 是默认的垃圾回收器。它通过多线程并行进行垃圾回收,旨在优化吞吐量。它通过一个主线程和多个工作线程来完成垃圾回收操作。Parallel GC 的主要目标是提高吞吐量,但它的停顿时间较长,因此不适用于低延迟要求高的应用。
- G1 GC:
- 从 JDK 9 开始,G1 GC 成为默认的垃圾收集器。G1 GC 针对大内存和低延迟应用进行了优化。它将堆内存划分为多个小区域,并通过分代回收和并行处理来控制停顿时间。G1 GC 还可以通过设置最大停顿时间的目标(例如
-XX:MaxGCPauseMillis
),来确保垃圾回收时的停顿时间不会过长。由于这些优势,G1 GC 成为 JDK 9 之后版本的默认选择。
- 从 JDK 9 开始,G1 GC 成为默认的垃圾收集器。G1 GC 针对大内存和低延迟应用进行了优化。它将堆内存划分为多个小区域,并通过分代回收和并行处理来控制停顿时间。G1 GC 还可以通过设置最大停顿时间的目标(例如
- JDK 12 之后的变化:
- 在 JDK 12 之后,G1 GC 继续作为默认垃圾回收器,进一步增强了其性能,尤其是在大内存和低延迟的场景下。JVM 也开始更多地支持新的垃圾回收器,如 ZGC 和 Shenandoah,它们适用于对延迟有极高要求的应用。
总结:从 JDK 12 开始,G1 GC 是默认的垃圾回收器,而 JDK 8 及之前版本使用的是 Parallel GC。对于现代应用,G1 GC 通常会是更好的选择,因为它在减少停顿时间方面表现较好,特别适用于大内存和低延迟应用。