新生代回收器
通性
Serial
ParNew
- 多线程回收
- 优先保证响应速度,降低 STW(STW 越大,执行垃圾回收的时间越长,回收的垃圾越多,减少垃圾回收的频率)
- 适合低延迟系统,搭配 CMS 使用
Parallel Scavenge
- 多线程回收
- 支持自适应策略,自动调节堆分区的大小和晋升年龄,优先保障吞吐量
- 适合大规模密集型任务等吞吐量较高的场景
老年代回收器
Serial Old
CMS
- 多线程
- 标记清除
- 初始标记:暂停用户线程,标记GC Roots对象直接关联的对象
- 并发标记:并发标记所有垃圾对象
- 重新标记:对并发标记时产生的错标、漏标,重新标记
- 并发清理:并发删除垃圾对象
- 配合 ParNew 使用
Parallel Old
- 多线程
- 标记整理
- 配合 Parallel Scavenge 使用
G1
- 将内存分为多个大小相等的 Region 区域,通过堆空间 /2048 得到
- Young GC:将 Eden 和 Survivor 中存活对象复制到新 Survivor 中,年龄 +1,清空这些区域
- Humongous 区:对象大小超过 region 的一半,直接放入老年代的 Humongous 区
- Mixed GC:新生代全部+老年代存活度低的区域回收,新生代转移到一个区,老年代转移到一个区
- 初始标记、并发标记、最终标记
- 筛选回收:对各个region的回收价值和成本排序,根据用户期望停顿时间和回收计划,选择 region 回收
- Full GC:对所有对象使用标记整理