说一下 JVM 有哪些垃圾回收器?

如果说垃圾收集算法是内存回收的方法论,那么垃圾收集器就是内存回收的具体实现。下图展示了7种作用于不同分代的收集器,其中用于回收新生代的收集器包括Serial、ParNew、Parallel Scavenge,回收老年代的收集器包括SerialOld、Parallel Old、CMS,还有用于回收整个Java堆的G1收集器。不同收集器之间的连线表示它们可以搭配使用。

  • Serial收集器(复制算法): 新生代单线程收集器,标记和清理都是单线程,优点是简单高效;

  • ParNew收集器 (复制算法): 新生代并行收集器,实际上是Serial收集器的多线程版本,在多核CPU环境下有着比Serial更好的表现;

  • Parallel Scavenge 收集器 (复制算法): 新生代并行收集器,追求高吞吐量,高效利用 CPU。吞吐量 = 用户线程时间/(用户线程时间+GC线程时间),高吞吐量可以高效率的利用CPU时间,尽快完成程序的运算任务,适合后台应用等对交互相应要求不高的场景;

  • Serial Old收集器 (标记-整理算法): 老年代单线程收集器,Serial收集器的老年代版本;

  • Parallel Old收集器 (标记-整理算法): 老年代并行收集器,吞吐量优先,Parallel Scavenge收集器的老年代版本;

  • CMS( Concurrent Mark Sweep)收集器(标记-清除算法): 老年代并行收集器,以获取最短回收停顿时间为目标的收集器,具有高并发、低停顿的特点,追求最短GC回收停顿时间。

  • G1(Garbage First)收集器 (标记-整理算法): Java堆并行收集器,G1收集器是JDK1.7提供的一个新收集器,G1收集器基于"标记-整理"算法实现,也就是说不会产生内存碎片。此外,G1收集器不同于之前的收集器的一个重要特点是:G1回收的范围是整个Java堆(包括新生代,老年代),而前六种收集器回收的范围仅限于新生代或老年代。

|-------------------|------|-------------------|------|-------|-----------------------------|
| 收集器 | 工作方式 | 描述 | 回收区域 | 算法 | 特点 |
| Serial | 串行 | 工作线程暂停,一个线程进行垃圾回收 | 新生代 | 标记-复制 | |
| Serial Old | 串行 | 工作线程暂停,一个线程进行垃圾回收 | 老生代 | 标记-整理 | |
| ParNew | 并行 | 工作线程暂停,多个线程进行垃圾回收 | 新生代 | 标记-复制 | Serial 的多线程版本 |
| CMS | 并行 | 用户和垃圾回收线程同时进行 | 老生代 | 标记-清除 | 低暂停 |
| Parallel Scavenge | 并行 | 工作线程暂停,一个线程进行垃圾回收 | 新生代 | 标记-复制 | 和 ParNew 相比能动态调整内存分配 jdk8默认 |
| Parallel Old | 并行 | 工作线程暂停,多个线程进行垃圾回收 | 老生代 | 标记-整理 | 替代串行的 Serial Old |
| G1 | 并行 | 用户和垃圾回收线程同时进行 | 整堆 | 分区算法 | 延迟可控的情况下尽量提高吞吐量 jdk9默认 |
| ZGC | 并行 | 用户和垃圾回收线程同时进行 | 整堆 | 分页算法 | 暂停时间不超过1ms |

相关推荐
Mutig_s2 分钟前
如何理解MVCC
java·后端·mysql·面试
无理 Java11 分钟前
【技术解析】消息中间件MQ:从原理到RabbitMQ实战(深入浅出)
java·分布式·后端·rabbitmq·多线程·mq·消息中间件
菜鸟求带飞_20 分钟前
算法打卡:第十一章 图论part04
java·数据结构·算法·图论
iQM7524 分钟前
Spring Boot 2.x基础教程:实现文件上传
java·开发语言·spring boot·后端
pumpkin8451428 分钟前
Spring Boot 从 2.7.x 升级到 3.3注意事项
java·spring boot·后端
2402_8575834928 分钟前
蜗牛兼职网:Spring Boot框架应用
java·spring boot·后端
菜到极致就是渣28 分钟前
Java如何操作Elasticsearch
java·开发语言·elasticsearch
全栈学姐36 分钟前
springbootKPL比赛网上售票系统
java·vue.js·spring boot·后端
Ylucius36 分钟前
苍穹外卖学习日志 -----20天项目从零到完结-----含软件下载,环境配置,框架学习,代码编写,报错处理,测试联调,每日总结,心路历程等等......
java·spring boot·后端·学习·intellij-idea·mybatis·idea
蓝影铁哥38 分钟前
SpringBoot3核心特性-核心原理
android·java·数据库·spring boot