开发者社区 问答 正文

jvm中有哪些经典的垃圾收集器?

jvm中有哪些经典的垃圾收集器?

展开
收起
人间蜉蝣 2021-11-04 18:27:33 966 分享 版权
阿里云 AI 助理回答

在Java虚拟机(JVM)中,垃圾收集器(Garbage Collector, GC)负责自动管理内存,回收不再使用的对象所占用的内存空间。多年来,随着Java技术的发展,出现了多种垃圾收集器,它们各有特点,适用于不同的应用场景。以下是一些经典的JVM垃圾收集器:

  1. Serial Collector

    • 适用于单CPU环境。
    • 使用单线程进行垃圾回收,因此在执行GC时会暂停所有应用线程(Stop-the-World)。
    • 简单且效率高,适合客户端应用或对响应时间要求不高的服务端应用。
  2. Parallel Collector(也称为吞吐量优先收集器):

    • 适用于多CPU环境,可以并行使用多个线程进行垃圾回收,以缩短GC停顿时间。
    • 目标是达到高吞吐量,即应用程序运行时间与总运行时间的比例最大化。
    • 仍然会有较明显的Stop-the-World事件,但整体上提高了应用的吞吐性能。
  3. Concurrent Mark Sweep (CMS) Collector

    • 设计目标是减少GC引起的停顿时间,适用于对响应时间敏感的服务。
    • CMS采用标记-清除算法,并将大部分工作并发地与用户线程一起执行,只有在初始标记和重新标记阶段需要短暂的停顿。
    • 有较高的CPU开销,且可能产生内存碎片。
  4. G1 (Garbage First) Collector

    • 是一种面向服务器的垃圾收集器,设计用于大规模多核、大容量内存的系统。
    • G1将堆内存划分为多个大小相等的区域(Region),并能预测性地避免长时间的GC停顿。
    • 它同时关注延迟和吞吐量,通过可预测的暂停时间模型来满足实时服务的需求。
    • 支持并行和并发操作,最终目标是替代CMS成为默认的垃圾收集器。
  5. Z Garbage Collector (ZGC)

    • 是Oracle JDK 11引入的一个实验性低延迟垃圾收集器。
    • 设计目标是即使在非常大的堆(如TB级别)上也能保持GC暂停时间在10毫秒以内。
    • 使用染色指针技术实现,几乎完全并发执行,大大减少了Stop-the-World的时间。
    • 支持巨型页面和可伸缩的元数据处理。
  6. Shenandoah Garbage Collector

    • 另一个针对低延迟需求的垃圾收集器,最初由Red Hat开发,后来被集成到OpenJDK中。
    • 同样追求极短的GC停顿时间,支持全并发的GC周期,几乎消除Stop-the-World事件。
    • 通过内存屏障、读屏障等机制实现,同样适用于大型堆。

这些垃圾收集器的选择取决于具体的应用场景、性能需求以及JDK版本。开发者可以根据应用的特点选择合适的垃圾收集器策略,以优化应用的性能。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答
问答分类:
问答地址: