美文网首页
垃圾收集器

垃圾收集器

作者: 修塔寻千里 | 来源:发表于2020-01-16 11:07 被阅读0次

Serial收集器

Serial收集器是最基本、发展历史最悠久的收集器。这个收集器是一个单线程的收集器,它在进行垃圾收集时,必须暂停其他所有的工作线程,直到它收集结束。它有着优于其他收集器的特点:简单而高效(与其他收集器单线程比),对于限定单个CPU的环境来说,Serial收集器由于没有线程交互的开销,专心做垃圾收集自然可以获得最高的单线程收集效率,Serial收集器多运行在Client模式下的虚拟机。

ParNew收集器

ParNew收集器其实是Serial收集器的多线程版本,多运行在Server模式下的虚拟机新生代的收集器,目前也是只有它可以与CMS收集器配合工作。

Parallel Scavenge收集器

是一个新生代收集器,使用复制算法,又是并行的多线程收集器,Parallel Scavenge收集器的目标是达到一个可控制的吞吐量(Throughput)。所谓吞吐量是指CPU用于运行用户代码的时间与CPU总耗时的比值,即吞吐量= 运行用户代码时间 / (运行用户代码时间+运行垃圾收集时间)。

Serial Old收集器

Serial Old是Serial 收集器的老年代版本,同样是一个单线程收集器,使用“标记-整理”算法。主要给Client模式下的虚拟机使用,如果再Server模式下,主要有2个用途:一是与Parallel Scavenge收集器搭配使用,而是作为CMS收集器的后备预案。

Parallel Old收集器

Parallel Old是Parallel Scavenge收集器的老年代版本,使用多线程和“标记-整理”算法。

CMS收集器

CMS(Concurrent Mark Sweep)收集器是一种以获取最短回收时间停顿为目标的收集器。基于“标记-清楚”算法实现,并发收集、低停顿,整个运行过程分为4步:

  • 初始标记
  • 并发标记
  • 重新标记
  • 并发清除
    缺点:
  • CMS收集器对CPU资源非常敏感
  • CMS收集器无法处理浮动垃圾(Floating Garbage),可能出现“Concurrent Mode Failure”失败而产生另一次Full GC的产生
  • 基于标记-清除算法会产生大量空间碎片

G1收集器

G1(Garbage-First)是一款面向服务端应用的垃圾收集器,具有以下特点:

  • 并行与并发,充分利用多CPU、多核环境下的硬件优势,使用多个CPU(或者CPU核心)来缩短Stop The World停顿时间
  • 分代收集
  • 空间整合,从整体来看采用“标记-整理”算法,从局部看基于”复制“算法实现,不会产生空间碎片
  • 可预测的停顿
    使用G1收集器时,Java堆的内存布局与其他收集器有很大的差别,它将整个Java堆划分为多个大小相等的独立区域(Region),虽然还保留新生代和老年代的概念,但新生代和老年代不再是物理隔离,他们都是一部分Region(不需要连续)的集合。G1收集器之所以能够建立可预测的停顿模型,是因为它可以有计划的避免在整个Java堆中进行全区域的垃圾收集。G1跟踪各个Region里面的垃圾堆的价值大小(回收所获得的空间大小以及回收所需要时间的经验值),在后台维护一个优先列表,每次根据允许的收集时间,优先回收价值最大的Region(这也是Garbage-First名称的由来)。

参考资料

  • 深入理解Java虚拟机 JVM高级特性与最佳实践 第2版

相关文章

网友评论

      本文标题:垃圾收集器

      本文链接:https://www.haomeiwen.com/subject/pecfzctx.html