5. GC收集器

2018-02-11  本文已影响0人  旧时的荣耀

这里讨论的收集器基于JDK1.7 Update 14之后的HotSpot虚拟机,这个虚拟机包含的所有收集器如下所示:


GC收集器.jpg

明确一个观点:虽然我们是在对各个收集器进行比较,但并非为了挑选出一个最好的收集器。因为直到现在为止还没有最好的收集器出现,更加没有万能的收集器,所以我们选择的只是对具体应用最合适的收集器


Serial收集器

Serial/Serial Old收集器运行示意图

ParNew收集器

ParNew/Serial Old收集器运行示意图

Parallel Scavenge收集器


Serial Old收集器

  1. 给Client模式下的虚拟机使用
  2. 在Server模式下主要还有两大用途:
    1. 在JDK 1.5以及之前的版本中与Parallel Scavenge收集器搭配使用
    2. 作为CMS收集器的后备预案,在并发收集发生Concurrent Mode Failure时使用

Parallel Old收集器

Parallel Scavenge/Parallel Old收集器运行示意图

CMS(Concurrent Mark Sweep)收集器

  1. 初始标记(CMS initial mark):标记一下GC Roots能直接关联到的对象,速度很快
  2. 并发标记(CMS concurrent mark):进行GC Roots Tracing
  3. 重新标记(CMS remark):修正并发标记期间用户程序继续运作而导致标记产生变动的那一部分对象的标记记录,停顿时间一般会比初始标记阶段稍长一些,但远比并发标记的时间短
  4. 并发清除(CMS concurrent sweep)
Concurrent Mark Sweep收集器运行示意图

G1(Garbage-First)收集器

  1. 初始标记(Initial Marking):标记GC Roots能直接关联到的对象,需要停顿线程,耗时很短
  2. 并发标记(Concurrent Marking):进行可达性分析,耗时较长,可并发执行
  3. 最终标记(Final Marking):修正并发标记期间标记产生变动的记录(Remembered Set),需要停顿线程,可并行执行
  4. 筛选回收(Live Data Counting and Evacuation):对Region的回收价值和成本进行排序,根据期望的GC停顿时间来制定回收计划,时间可控,停顿用户线程来大幅提高效率
G1收集器运行示意图
上一篇下一篇

猜你喜欢

热点阅读