面试题:Java 中常见的垃圾收集器有哪些?

在Java中,垃圾收集器是Java虚拟机(JVM)的一部分,负责自动管理内存,回收不再使用的对象所占用的内存。

随着Java的发展,出现了多种不同的垃圾收集器,每种都有其特定的应用场景和优化目标。

以下是截至2025年一些常见的垃圾收集器:

  1. Serial收集器:这是一个单线程的收集器,意味着它在执行垃圾回收时会暂停所有应用程序线程(即发生“Stop the World”事件)。尽管它的名字听起来可能不太吸引人,但对于运行在客户端模式下的小型应用程序或那些CPU资源有限的环境来说,它仍然是一个合理的选择。
  2. Parallel收集器(也称为Throughput收集器):此收集器使用多个线程进行垃圾回收,旨在提高垃圾回收的吞吐量。与Serial收集器一样,它也会导致“Stop the World”事件,但通过并行处理可以减少这些停顿的时间。
  3. CMS(Concurrent Mark Sweep)收集器:设计目的是为了减少应用程序的停顿时间。CMS收集器尝试在不长时间停止应用程序线程的情况下完成大部分工作。然而,它只针对老年代,并且由于并发模式失败等原因可能会遇到挑战。
  4. G1(Garbage First)收集器:从JDK 9开始成为默认收集器。G1是一个服务器风格的垃圾收集器,适用于多处理器机器。它实现了对堆的分区处理,并试图预测性地执行垃圾收集以满足用户定义的暂停时间目标。
  5. ZGC(Z Garbage Collector):ZGC是Oracle为满足低延迟要求而开发的一个可扩展的低延迟垃圾收集器。ZGC的设计目标是能够在TB级别的堆上保持非常低的暂停时间(不超过10毫秒),同时对应用性能的影响最小。
  6. Shenandoah:由Red Hat开发,类似于ZGC,旨在实现低暂停时间的目标,但通过不同的技术手段来达到目的。Shenandoah可以在任意大小的堆上保证一致的短暂停顿时间。

选择合适的垃圾收集器取决于具体的应用需求,如响应时间、吞吐量和硬件资源等因素。了解每个收集器的特点有助于做出更合适的选择。

THE END
喜欢就支持一下吧
点赞10 分享