垃圾收集算法
- 标记清除算法。
- 复制算法。
- 标记整理算法。
- 分代收集。年轻代复制算法,老年代标记清除或标记整理算法。
垃圾收集器
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,但最后一步,为筛选回收。
尚未经过实际应用的考验,应谨慎使用。
垃圾收集器参数表
-- 结束 --