说一下 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

相关推荐

  1. jvm垃圾回收

    2024-02-22 12:50:02       61 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-02-22 12:50:02       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-02-22 12:50:02       101 阅读
  3. 在Django里面运行非项目文件

    2024-02-22 12:50:02       82 阅读
  4. Python语言-面向对象

    2024-02-22 12:50:02       91 阅读

热门阅读

  1. 零基础到高级:Android音视频开发技能路径规划

    2024-02-22 12:50:02       45 阅读
  2. Redis降低内存占用(二)分片结构

    2024-02-22 12:50:02       51 阅读
  3. 【 OpenGL 教程06 】 关于着色器(01)

    2024-02-22 12:50:02       43 阅读
  4. 腾讯云主机Ubuntu22.04安装Odoo17

    2024-02-22 12:50:02       57 阅读
  5. 求逆序对

    2024-02-22 12:50:02       48 阅读
  6. Oracle普通用户启停JOB报错ORA 27486权限不足

    2024-02-22 12:50:02       50 阅读
  7. vue系列--图片通过鼠标滚轮放大缩小指令

    2024-02-22 12:50:02       48 阅读
  8. netty的TCP服务端和客户端实现

    2024-02-22 12:50:02       50 阅读
  9. 令牌颁发与管理服务

    2024-02-22 12:50:02       48 阅读