垃圾收集器

垃圾收集器

按照分代区分为老年代收集器和新生代收集器。年轻代收集器包含:SerialParNewParallel ScavengeG1 ;老年代收集器有:CMSSerial Old(MSC)Parallel OldG1 。G1 收集器既能收集新生代也能收集老年代。

Serial 收集器

Serial 是一个新生代收集器,单线程工作,使用复制算法。当垃圾收集时其他的所有线程都处于暂停状态(Stop The World),优点:简单高效。

ParNew 收集器

ParNew 是Serial 收集器的多线程版本,使用复制算法。在Serail的基础上增加了多线程垃圾收集。

Parallel Scavenge 收集器

Parallel Scavenge 是一个新生代多线程收集器,使用复制算法。收集器的目标是达到一个可以控制的吞吐量。

Serial Old

Serial 收集器的老年代版本,单线程,使用标记整理算法。

Parallel Old

Parallel Old 收集器是 Serial Old的多线程版本,使用标记整理算法。

CMS 收集器

CMS 是老年代,多线程,使用标记清除算法的收集器,其主要目标是一种以获取最短回收停顿时间为目标的收集器。

其过程分为四个步骤:

  1. 初始标记
  2. 并发标记
  3. 重新标记
  4. 并发清除

其中,初始标记、重新标记着两个步骤仍然需要”Stop The World”。初始标记仅仅标记一下GC Roots能直接关联到的对象,速度很快。并发标记阶段就是进行GC Roots Tracing 的过程,而重新标记阶段则是为了修正并发标记期间因用户程序继续运作而导致标记产生变动的那一部分对象的标记记录。这个阶段的停顿时间一般会比初始化标记阶段稍长一些。但是远比并发标记的时间短。

CMS 的优点:

  1. 并发收集
  2. 低停顿

CMS 的缺点:

  1. CMS收集器对CPU资源敏感。并发阶段会降低吞吐量。
  2. CMS 收集器无法处理浮动垃圾
  3. 标记清除算法会产生大量空间碎片

G1

  1. 并行与并发:G1 能充分利用CPU、多核环境下的硬件优势、使用多个CPU来缩短 Stop The World 的时间。
  2. 分代收集
  3. 空间整合 从整体上看基于标记整理,局部为复制算法。
  4. 可预测的停顿时间。