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

ops/2025/3/15 2:51:57/

在 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则都是不区分

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


http://www.ppmy.cn/ops/165826.html

相关文章

【网络安全 | 漏洞挖掘】$15,000——通过持久token获取个人身份信息(PII)

未经许可,不得转载。 文章目录 绕侧攻击应用程序发现注册流程中的异常token调查token泄露Google Dorking 登场Wayback Machine 的作用影响分析绕侧攻击应用程序 某金融服务平台提供了测试凭据,允许直接登录测试环境。主应用程序包含数百个功能和端点,因此在测试过程中花费了…

JAVA 基础语法备忘录 -

包装类,IO,多线程,网络编程,集合,https://http://gitee.com/SnailClimb/JavaGuide 包装类 用一个对象,把基本数据类型被包装成对象类型就是包装类 基本数据类型(int,char,boolean,float,doubl…

万字技术指南STM32F103C8T6 + ESP8266-01 连接 OneNet 平台 MQTT/HTTP

此博客为一份详细的指南,涵盖 STM32F103C8T6 通过 ESP8266-01 连接 OneNet 平台,并使用 MQTT/HTTP 进行数据通信的完整流程。这份文档包括: OneNet 平台的介绍与功能概览在 OneNet 上创建和配置设备的方法STM32CubeIDE 的开发环境搭建ESP826…

《ECharts :不强不大,做点可视化》

“只考虑金钱的婚姻是荒谬的&#xff0c;不考虑金钱的婚姻是愚蠢的” ECharts 是一个强大的数据可视化库&#xff0c;广泛应用于前端开发中。 1. 基本使用步骤 ​引入 ECharts&#xff1a; 通过 CDN 引入&#xff1a; <script src"https://cdn.jsdelivr.net/npm/echar…

22 - 天 TCPIP 四层模型是什么?Cookie、Session、Token 之间有什么区别?从网络角度来看,用户从输入网址到网页显示,期间发生了什么?

TCP/IP 四层模型是什么&#xff1f; 应用层 功能&#xff1a;应用层是 TCP/IP 模型的最高层&#xff0c;它直接为用户提供各种网络应用服务&#xff0c;如网页浏览、文件传输、电子邮件等。此外&#xff0c;它还负责处理应用程序与网络之间的通信&#xff0c;包括数据的格式化、…

docker3-容器与镜像命令

前言 容器命令[部分] docker run –name“nginx-lb” 这个就是为容器起一个名称 以前是随机起的名称 docker run -d --name mynginx1 nginx:1.24.0 docker ps 这样就可以看到我们起的名字了 docker stop mynginx1 这个就可以停掉指定名字的容器了&#xff0c;但不是删除…

postgresql 数据库使用

目录 索引 查看索引 创建 删除索引 修改数据库时区 索引 查看索引 select * from pg_indexes where tablenamet_table_data; 或者 select * from pg_statio_all_indexes where relnamet_table_data; 创建 CREATE INDEX ix_table_data_time ON t_table_data (id, crea…

携程笔试 2025.3.13

1.诗 第一行1个字&#xff0c;之后每行字数增加1&#xff0c;输出每行第一列字符。 #include <bits/stdc.h> using namespace std; string s,ans; int main() {int d,idx;cin>>s;idx1;didx;for(int i0;i<s.size();i) {while(d) {if(didx) {anss[i];}d--;i;}id…