JVM虚拟机系统性学习-垃圾回收器Serial、ParNew、Parallel Scavenge和Parallel Old

2023-12-13 13:27:22

垃圾回收器

有 8 种垃圾回收器,分别用于不同分代的垃圾回收:

  • 新生代回收器:Serial、ParNew、Parallel Scavenge
  • 老年代回收器:Serial Old、Parallel Old、CMS
  • 整堆回收器:G1、ZGC

Serial:串行回收

  • Serial是最基本、最古老的垃圾收集器

  • Serial收集器采用复制算法、单线程执行和 “STW” 机制的方式进行内存回收

  • 除了年轻代之外,Serial 收集器还提供了用于执行老年代垃圾收集的 Serial Old 收集器。Serial Old 同样采用串行回收和 “STW” 机制,只不过内存回收算法使用的是标记-压缩算法。

  • 优势

    • 简单高效(与其他收集器的单线程相比),在垃圾收集时暂停了用户线程,专心回收内存,因此单线程效率很高
  • 缺点

    • 垃圾回收时,有STW时间,不适用于交互性强的应用程序
  • 应用场景

    • 可以在Client模式下的虚拟机运行
    • 在用户的桌面应用场景中,可用内存一般不大(几十MB至上百MB),可以在较短时间内完成垃圾收集

在这里插入图片描述

ParNew:并行回收

  • Par指Parallel,New指处理新生代的垃圾收集
  • ParNew在新生代采用并行回收、复制算法、STW机制回收内存
  • ParNew是很多 JVM 运行在 Server 模式下新生代的默认垃圾收集器

ParNew + SerialOld 配合使用,ParNew 回收新生代,并行更高效,老年代回收次数少,使用串行更节省资源

在这里插入图片描述

Parallel Scavenge:吞吐量优先

  • Parallel Scavenge 收集器采用复制算法、并行回收和STW机制进行内存回收
  • Paralle 收集器和 ParNew 收集器是否重复呢?
    • 不是。Parallel Scavenge 收集器的目标是达到一个可控制的吞吐量,他也被称为吞吐量优先的垃圾收集器
    • 自适应调节策略也是 Parallel 与 ParNew 一个重要区别
      • 自适应调节策略即 Parallel 收集器自动调整 年轻代的大小、Eden 和 Survivor 的比例、晋升老年代的对象年龄等参数,为了更好的平衡堆大小、吞吐量和停顿时间
  • 高吞吐量可以高效地利用 CPU 时间,尽快完成程序的运算任务,主要适合在后台运算不需要太多交互的任务

在这里插入图片描述

Parallel Old:吞吐量优先

  • Parallel Scavenge 收集器在 JDK1.6 时提供了用于回收老年代的 Parallel Old 收集器,用来代替老年代的 Serial Old 收集器
  • Parallel Old 收集器采用了标记-压缩算法、并行回收和STW机制回收老年代内存

在这里插入图片描述

文章来源:https://blog.csdn.net/qq_45260619/article/details/134969444
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。