美文网首页
Java之垃圾收集器比较

Java之垃圾收集器比较

作者: 小玲子之凌空蹈虚 | 来源:发表于2018-11-26 19:22 被阅读0次

Serial收集器

  • 此收集器是单线程的,但它的”单线程“的意义并不仅仅说明它是一个CPU或一条收集线程去完成垃圾收集工作,更重要的是在进行垃圾收集时,必须暂停其他所有的工作线程,直到它收集结束(会发生STW)。
  • 简单高效(与其他收集器的单线程比)没有线程交互的开销,专心做垃圾收集。
  • 新生代收集器、使用复制算法。
  • 大多运行在Client模式下的默认新生代收集器。

ParNew收集器

  • Serial收集器的多线程版本,添加了可用的所有控制参数(例如:-xx:SurvivorRatio、-XX:PretenureSizeThreshold、-XX:HandlePromotionFailure等)、收集算法、Stop the World、对象分配规则,回收策略等都与Serial收集器完全一样。
  • 新生代收集器,使用复制算法。
  • 大多运行在Server模式下的默认新生代收集器。
  • 目前只有它能与CMS收集器配合工作。

parallel Scavenge收集器

  • 新生代收集器,使用复制算法。
  • 可自适应调节。
  • 提供了控制参数(例如:-xx:SurvivorRatio、-XX:PretenureSizeThreshold、-XX:HandlePromotionFailure、-XX:UserAdaptiveSizePolicy),-XX:UserAdaptiveSizePolicy是个开关参数,当打开后,就不需要手动指定新生代的大小(-Xmn),Eden与Survivor区的比例(-XX:SurvivorRatio),晋升老年代对象年龄(-XX:PretenureSizeThreshold)
  • 吞吐量优先收集器

Serial Old收集器

  • 老年代收集器、单线程收集器、使用”标记-整理“算法。

Parallel Old收集器

  • 老年代收集器,使用多线程和”标记-整理“算法,JDK1.6中才开始提供。
  • 吞吐量优先收集器

CMS收集器(Concurrent Market Sweep)

  • CMS收集器是一种以获取最短回收停顿时间为目标的收集器。
  • CMS老年代收集器。
  • 并发收集器。
  • 基于”标记-清除“算法实现,整个过程分为4个步骤:

1:初始化标记(CMS initial mark)
2:并发标记(CMS concurrent mark)
3:重新标记(CMS remark )
4:并发清除(CMS concurrent Sweep)
其中,初始标记、清除标记仍然需要STW,初始标记仅仅只是标记一下GC Roots能直接关联到的对象,速度很快。
特点:并发收集、低停顿。
缺点:
1:CMS收集器无法处理浮动垃圾,可能出现Concurrent Mode Failure 失败导致另一次Full GC的发生。
2:会产生大量的空间碎片,空间碎片过多时,将会给大对象分配带来很大麻烦。

并发标记阶段是进行GC Roots Tracing的过程。
重新标记阶段则是为了修正并发标记期间用户程序继续运作而导致标记产生变动的那一部分对象的标记记录,这个阶段的停顿时间一般会比初始化标记阶段稍长一些,但远比并发标记的时间短。
由于整个过程中耗时最长的并发标记和并发清除过程收集器都可以与用户线程一起工作,所以,从总体上来说,CMS收集器的内存回收过程是用户线程一起并发执行的。

G1收集器

G1是一款面向服务端应用的垃圾收集器,与CMS相比,G1具备如下特点:

1:并行与并发
2:分代收集
3:空间整合,与CMS的“标记-清理”算法不同,G1从整体来看是基于“标记-整理”算法实现的收集器
4:可预测的停顿

G1收集器的运作大致可划分为几个步骤

1:初始化标记(initial marking)
2:并发标记(concurrent marking)
3:最终标记(Final Marking)
4:筛选回收(Live Data Counting Evacuation)

相关文章

  • 常见Java垃圾收集器

    常见Java垃圾收集器参见:参考 1参考1 Java垃圾收集器

  • Java之垃圾收集器比较

    Serial收集器 此收集器是单线程的,但它的”单线程“的意义并不仅仅说明它是一个CPU或一条收集线程去完成垃圾收...

  • JVM源码分析系列

    JVM G1算法系列 G1垃圾收集器介绍 G1垃圾收集器之RSet G1垃圾收集器之SATB G1垃圾收集器之对象...

  • jvm系列之垃圾收集器

    jvm系列之垃圾收集器 1 垃圾收集器介绍    java内存在运行时被分为多个区域,其中程序计数器、虚拟机栈、本...

  • JVM垃圾收集器(三)

    接着上一篇JVM垃圾收集器(二)讲。 四、垃圾收集器 Java虚拟机规范中对垃圾收集器应该如何实现并没有任何规定,...

  • 垃圾回收文章

    深入理解 Java G1 垃圾收集器

  • java和jvm分别查看使用的垃圾收集器

    一、java查看垃圾收集器 使用命令:java -XX:+PrintCommandLineFlags -versi...

  • JVM垃圾回收

    JVM垃圾收集器 一、垃圾收集器的分类 1.1 Serial GC 出现的最早,比较古老,最大的特点就是垃圾收集策...

  • CMS垃圾收集器——重新标记的讨论

    《深入理解java虚拟机 第二版 JVM高级特性与最佳实践》里面提到CMS垃圾收集器。 CMS垃圾收集器的垃圾回收...

  • Java 垃圾回收器类型

    垃圾收集器类型(已Java8为例) 串行垃圾回收器(Serial Garbage Collector) 串行垃圾回...

网友评论

      本文标题:Java之垃圾收集器比较

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