垃圾收集算法
  1. 标记清除算法。
  2. 复制算法。
  3. 标记整理算法。
  4. 分代收集。年轻代复制算法,老年代标记清除或标记整理算法。
垃圾收集器

Serial收集器

最早的,最基本的。
单线程,收集过程会停顿。
适用于Client,单CPU场景,简单高效。
能与CMS收集器配合。
新生代。

ParNew收集器

Serial的多线程版本。
能与CMS收集器配合。
默认开启的收集线程数与CPU的数量相同,可配置。
新生代。

Parallel Scavenge收集器

新生代。
多线程。
目标是吞吐量。
可控制吞吐量。
可配置GC时间占比,可配置GC最大停顿时间。
经常称为“吞吐量优先收集器”
-XX:+UseAdaptiveSizePolicy,开启自适应调节策略。

Serial Old收集器

Serial老年代版本,单线程,标记-整理算法。
CMS的后备预案。

Parallel Old收集器

Parallel Scavenge老年代版本,多线程,标记-整理算法。

CMS收集器

目标是最短停顿时间。
老年代。
标记-清除算法。

步骤:

  • 初始标记;
  • 并发标记;
  • 重新标记;
  • 并发清除;

并发、低停顿收集器。

缺点:

  • 并发阶段,耗CPU资源,虽并发,但用户线程变慢;
  • 并发清理阶段的浮动垃圾无法清理;并发清理需预留空间,68,92,可能失败;
  • 标记清除,空间碎片。可配置每次压缩(默认),或N次后压缩。压缩需停顿;

G1收集器

最前沿成果之一。
面向服务器端应用。
目标是替代CMS。
可独立管理整个堆。
标记-整理算法,无碎片。
堆划分为多个大小相等的独立区域(Region)。
指定在一个长度为M毫秒的时间片段内,消耗在垃圾收集上的时间不得超过N毫秒。
每次根据允许的收集时间,优先回收价值最大的Region(这也就是Garbage-First名称的来由)。
有限的时间内获取尽可能高的收集效率。
被引用对象所属的Region的Remembered Set之中,存有,跨Region或跨代的引用。
步骤同CMS,但最后一步,为筛选回收。
尚未经过实际应用的考验,应谨慎使用。

垃圾收集器参数表

垃圾收集器_单线程

-- 结束 --