Java 垃圾回收器(Garbage Collector,GC)是Java虚拟机(JVM)中的一个重要组件,无论是日常开发,还是技术面试中,它都是一个非常重要的知识点。
那么,如何才能系统性地学习 JVM垃圾回收器的相关知识呢?这篇文章,我们整理了过往所有关于 JVM回收器的文章,希望可以帮到你。
首先,让我们从全局来了解下 JVM垃圾回收器的类型以及它们的特点,优缺点和适用场景:
1. Serial Garbage Collector
- 特点: 使用单线程进行垃圾回收。
- 适用场景: 适用于单处理器机器或小型应用程序。
- 优点: 实现简单,开销低。
- 缺点: 会导致较长的暂停时间,影响应用程序性能。
2. Parallel Garbage Collector
- 特点: 使用多线程进行垃圾回收。
- 适用场景: 适用于多处理器机器和需要高吞吐量的应用程序。
- 优点: 提高了垃圾回收的效率,减少了暂停时间。
- 缺点: 在垃圾回收期间,应用程序仍然会暂停。
3. CMS (Concurrent Mark-Sweep) Garbage Collector
- 特点: 主要目标是减少暂停时间,适用于需要低延迟的应用。
- 适用场景: 适用于对响应时间要求较高的应用程序。
- 优点: 大部分垃圾回收工作在与应用程序并发进行,减少了暂停时间。
- 缺点: 可能会产生内存碎片,需要更多的CPU资源。
4. G1 (Garbage-First) Garbage Collector
- 特点: 设计用于处理大堆内存,提供可预测的暂停时间。
- 适用场景: 适用于大内存和需要可预测暂停时间的应用程序。
- 优点: 分区回收内存,减少了长时间的暂停,适合大堆内存。
- 缺点: 相比其他垃圾回收器,调优复杂度较高。
5. ZGC (Z Garbage Collector)
- 特点: 设计目标是处理大堆内存,且暂停时间非常短(通常低于10毫秒)。
- 适用场景: 适用于超大内存应用和对暂停时间极为敏感的应用。
- 优点: 极低的暂停时间,可处理TB级别的堆内存。
- 缺点: 目前还在不断发展和优化中,可能不如其他垃圾回收器稳定。
6. Shenandoah Garbage Collector
- 特点: 类似于ZGC,目标是提供低暂停时间。
- 适用场景: 适用于低延迟和大堆内存的应用。
- 优点: 低暂停时间,适合大内存应用。
- 缺点: 需要更多的CPU资源,复杂度较高。
所有 JVM垃圾回收器对比如下图:
最后,虽然 JVM垃圾回收器的知识很重要,但是它真的有点难,而且在日常开发中,很多小伙伴常年奋斗在CRUD业务上,很少和JVM直接打交道,因此,理解和掌握回收器的原理需要一个过程。