Serial
特点:
JDK 1.3 开始提供
新生代收集器
无线程交互开销,单线程收集效率最高
进行垃圾收集时需要暂停用户线程
适用于客户端,小内存堆的回收
ParNew
特点:
是 Serial 收集器的多线程并行版
JDK 7 之前首选的新生代收集器
第一款支持并发的收集器,首次实现垃圾收集线程与用户线程基本上同时工作
除 Serial 外,只有它能与 CMS 配合
Parallel Scavenge
特点:
新生代收集器
标记-复制算法
多线程并行收集器
追求高吞吐量,即最小的垃圾收集时间
可以配置最大停顿时间、垃圾收集时间占比
支持开启垃圾收集自适应调节策略,追求适合的停顿时间或最大的吞吐量
Serial Old
特点:
与 Serial 类似,是 Serial 收集器的老年代版本
使用标记-整理算法
Parallel Old
特点:
JDK 6 开始提供
Parallel Scavenge 的老年代版
支持多线程并发收集
标记-整理算法
Parallel Scavenge + Parallel Old 是一个追求高吞吐量的组合
CMS
特点:
标记-清除算法
追求最短回收停顿时间
多应用于关注响应时间的 B/S 架构的服务端
并发收集、低停顿
占用一部分线程资源,应用程序变慢,吞吐量下降
无法处理浮动垃圾,可能导致 Full GC
内存碎片化问题
G1
特点:
JDK 6 开始实验,JDK 7 商用
面向服务端,JDK 9 取代 Parallel Scavenge + Parallel Old
结合标记-整理、标记-复制算法
首创局部内存回收设计思路
基于 Region 内存布局,采用不同策略实现分代
不再使用固定大小、固定数量的堆内存分代区域划分
优先回收价收益最大的 Region
单个或多个 Humongous 区域存放大对象
使用记忆集解决跨 Region 引用问题
复杂的卡表实现,导致更高的内存占用,堆的 10%~20%
全功能垃圾收集器
追求有限的时间内最高收集效率、延迟可控的情况下最高吞吐量
追求应付内存分配速率,而非一次性清掉所有垃圾内存
适用于大内存堆
Shenandoah
ConstXiong 备案号:苏ICP备16009629号-3