十种GC回收器
Serial 回收器
- 单线程收集
- 针对新生代
- 使用复制算法
- 会产生较长时间的停顿(Stop the world),进行垃圾收集时,必须暂停所有工作线程,直到完成
- 不会产生线程切换的开销
Serial Old 回收器
- 老年代单线程回收
- 使用标记整理算法
Parallel Scavenge回收器
jdk 1.8默认的垃圾回收器
- 多线程并行回收
- 新生代回收器,采用复制算法
- 追求高吞吐量,充分利用CPU资源【吞吐量优先】
- 进行垃圾收集时,必须暂停所有工作线程,直到完成
Parallel Old回收器
- 老年代多线程回收
- 使用标记整理算法
ParNew回收器
- 多线程并行回收
- 新生代回收器,采用复制算法
ParNew收集器是Serial收集器的多线程版本,许多运行在Server模式下的虚拟机中首选的新生代收集器,除Serial外,只有它能与CMS收集器配合工作。
CMS 回收器
- 并发低停顿收集器
- 使用标记清除算法
- 四个阶段
- 初始标记 (标记GC Roots可以直接关联的对象,速度很快)
- 并发标记 (进行GC Roots Tracing,判断对象是否存活)
- 重新标记 (校准并发标记对象的存活状态)
- 并发清除 (回收标记的对象)
- 初始标记和重新标记仍然需要Stop The World
- CMS缺点
- 由于并发带来的CPU资源消耗
- 由于并发收集在回收过程中产生的浮动垃圾无法清除
- 使用标记清除算法带来的空间碎片问题
- 四个阶段
G1回收器
- 使用分代垃圾回收策略。
- 新特性:使用分区算法。使内存不再连续。
- 支持很大的堆,高吞吐量。