欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 资讯 > JVM的垃圾回收器都有哪些?

JVM的垃圾回收器都有哪些?

2025/3/13 15:30:36 来源:https://blog.csdn.net/yyueshen/article/details/146204597  浏览:    关键词:JVM的垃圾回收器都有哪些?

在 Java 虚拟机(JVM)中,不同的垃圾回收器采用不同的算法和策略,以满足不同应用场景的性能需求。以下为你详细介绍常见的 JVM 垃圾回收器:

新生代垃圾回收器

1. Serial 收集器
  • 特点:单线程的垃圾回收器,在进行垃圾回收时,必须暂停其他所有的工作线程(Stop The World,简称 STW),直到垃圾回收完成。
  • 适用场景:适用于客户端模式下的小型应用程序,因为它的实现简单,没有线程交互的开销,在单 CPU 环境下有较好的性能。
  • 启用参数-XX:+UseSerialGC
2. ParNew 收集器
  • 特点:Serial 收集器的多线程版本,同样会产生 STW 现象,但它可以利用多个 CPU 核心并行进行垃圾回收,从而提高垃圾回收的效率。
  • 适用场景:常与老年代的 CMS 收集器配合使用,在注重响应时间的服务器应用中较为常见。
  • 启用参数-XX:+UseParNewGC
3. Parallel Scavenge 收集器
  • 特点:也是一款多线程的新生代收集器,它的目标是达到一个可控制的吞吐量(吞吐量 = 运行用户代码时间 /(运行用户代码时间 + 垃圾收集时间))。它可以自动调节新生代的大小、Eden 区和 Survivor 区的比例等参数,以达到预设的吞吐量目标。
  • 适用场景:适用于那些对吞吐量要求较高、对停顿时间要求不是特别苛刻的应用,如后台运算等。
  • 启用参数-XX:+UseParallelGC

老年代垃圾回收器

1. Serial Old 收集器
  • 特点:Serial 收集器的老年代版本,同样是单线程收集器,使用标记 - 整理算法。
  • 适用场景:主要用于客户端模式,或者在 Server 模式下作为 CMS 收集器发生失败时的后备预案。
  • 启用参数-XX:+UseSerialGC(同时会启用 Serial 作为新生代收集器)
2. Parallel Old 收集器
  • 特点:Parallel Scavenge 收集器的老年代版本,多线程收集器,使用标记 - 整理算法。它的出现是为了在注重吞吐量的场景下,与 Parallel Scavenge 收集器配合使用,进一步提高系统的整体吞吐量。
  • 适用场景:与 Parallel Scavenge 收集器搭配,适用于对吞吐量要求较高的服务器应用。
  • 启用参数-XX:+UseParallelOldGC
3. CMS(Concurrent Mark Sweep)收集器
  • 特点:以获取最短回收停顿时间为目标的收集器,采用标记 - 清除算法。它的整个过程分为初始标记、并发标记、重新标记和并发清除四个阶段,其中初始标记和重新标记阶段会产生 STW,但停顿时间相对较短,而并发标记和并发清除阶段可以与用户线程并发执行。
  • 适用场景:适用于对响应时间要求较高的应用,如 Web 应用等。
  • 启用参数-XX:+UseConcMarkSweepGC

全堆垃圾回收器

1. G1(Garbage - First)收集器
  • 特点:面向服务端应用的垃圾回收器,将堆内存划分为多个大小相等的 Region,它可以预测垃圾回收的停顿时间,并根据用户指定的停顿时间目标,优先回收价值最大的 Region。G1 收集器采用标记 - 整理和复制算法,整体上看是标记 - 整理算法,局部(Region 之间)是复制算法,不会产生内存碎片。
  • 适用场景:适用于大内存、多 CPU 的服务器应用,能较好地满足对响应时间和吞吐量的综合要求。
  • 启用参数-XX:+UseG1GC
2. ZGC(Z Garbage Collector)
  • 特点:可伸缩的低延迟垃圾回收器,它的停顿时间几乎可以忽略不计,最大停顿时间不超过 10 毫秒。ZGC 采用染色指针和读屏障技术,能够在并发的情况下完成对象的标记、移动等操作。
  • 适用场景:适用于对低延迟要求极高的应用,如大型在线游戏、金融交易系统等。
  • 启用参数-XX:+UseZGC
3. Shenandoah 收集器
  • 特点:与 ZGC 类似,也是一款追求极低延迟的垃圾回收器,它通过与用户线程并发执行大部分的垃圾回收工作,减少了 STW 时间。
  • 适用场景:适用于对延迟非常敏感的应用场景。
  • 启用参数-XX:+UseShenandoahGC

新生代往往和老年代回收器是配合使用一般搭配如下:

  • Serial 和 Serial Old
  • ParNew 和CMS
  • Parallel Scavenge 和 Parallel Old

G1、ZGC和Shenandoah则都是不区分

不同的垃圾回收器有不同的特点和适用场景,在实际应用中,需要根据应用的内存使用情况、性能要求等因素选择合适的垃圾回收器。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词