JVM的默认垃圾收集器是哪个?

参考回答

JVM 默认的垃圾收集器取决于 JDK 版本和运行的环境:

  1. JDK 8 及之前版本:默认垃圾收集器是 Parallel GC(并行垃圾回收器)。它是为了提高多核 CPU 系统的吞吐量而设计的,并且使用多个线程进行垃圾回收,以加速回收过程。

  2. JDK 9 到 JDK 11:默认垃圾收集器仍然是 Parallel GC,但在这些版本中,JVM 引入了更多的回收器选项。

  3. JDK 12 及之后版本:默认垃圾收集器改为 G1 GC(Garbage-First)。G1 GC 是一种以低停顿为目标的垃圾回收器,适合大内存系统和低延迟应用。

总结:JDK 12 及之后版本的默认垃圾收集器是 G1 GC,而 JDK 8 及之前版本的默认垃圾收集器是 Parallel GC。

详细讲解与拓展

  1. Parallel GC
    • 在 JDK 8 及之前的版本中,Parallel GC 是默认的垃圾回收器。它通过多线程并行进行垃圾回收,旨在优化吞吐量。它通过一个主线程和多个工作线程来完成垃圾回收操作。Parallel GC 的主要目标是提高吞吐量,但它的停顿时间较长,因此不适用于低延迟要求高的应用。
  2. G1 GC
    • 从 JDK 9 开始,G1 GC 成为默认的垃圾收集器。G1 GC 针对大内存和低延迟应用进行了优化。它将堆内存划分为多个小区域,并通过分代回收和并行处理来控制停顿时间。G1 GC 还可以通过设置最大停顿时间的目标(例如 -XX:MaxGCPauseMillis),来确保垃圾回收时的停顿时间不会过长。由于这些优势,G1 GC 成为 JDK 9 之后版本的默认选择。
  3. JDK 12 之后的变化
    • 在 JDK 12 之后,G1 GC 继续作为默认垃圾回收器,进一步增强了其性能,尤其是在大内存和低延迟的场景下。JVM 也开始更多地支持新的垃圾回收器,如 ZGC 和 Shenandoah,它们适用于对延迟有极高要求的应用。

总结:从 JDK 12 开始,G1 GC 是默认的垃圾回收器,而 JDK 8 及之前版本使用的是 Parallel GC。对于现代应用,G1 GC 通常会是更好的选择,因为它在减少停顿时间方面表现较好,特别适用于大内存和低延迟应用。

发表评论

后才能评论