一、新生代回收器
1. Serial 收集器

-
目标代际:新生代
-
回收算法:标记-复制算法
-
工作模式:
-
单线程执行垃圾回收
-
STW暂停所有应用线程
-
-
特点:
-
简单高效(无线程交互开销)
-
暂停时间长(不适合服务端)
-
-
启用参数 :
-XX:+UseSerialGC
2. ParNew 收集器

-
目标代际:新生代
-
回收算法:标记-复制算法
-
工作模式:
-
多线程并行回收(默认=CPU核心数)
-
STW暂停所有线程
-
-
特点:
-
Serial的多线程版本
-
需配合CMS使用(老年代回收器)
-
-
启用参数 :
-XX:+UseParNewGC
3. Parallel Scavenge 收集器

-
目标代际:新生代
-
回收算法:标记-复制算法
-
工作模式:
-
多线程并行回收
-
自适应策略动态调整堆参数
-
-
特点:
-
吞吐量优先:最大化应用运行时间
-
提供精确控制参数:
-XX:GCTimeRatio
、-XX:MaxGCPauseMillis
-
-
启用参数 :
-XX:+UseParallelGC
二、老年代回收器
4. Serial Old 收集器

-
目标代际:老年代
-
回收算法:标记-整理算法
-
工作模式:
-
单线程执行
-
全STW暂停
-
-
特点:
-
Serial收集器的老年代版本
-
作为CMS失败时的后备方案
-
-
启用参数 :
-XX:+UseSerialGC
5. Parallel Old 收集器

-
目标代际:老年代
-
回收算法:标记-整理算法
-
工作模式:
-
多线程并行回收
-
全STW暂停
-
-
特点:
-
Parallel Scavenge的老年代搭档
-
吞吐量优先设计
-
-
启用参数 :
-XX:+UseParallelOldGC
6. CMS 收集器(Concurrent Mark-Sweep)

-
目标代际:老年代
-
回收算法:标记-清除算法
-
四阶段工作流:
-
初始标记:STW暂停,标记GC Roots直接引用
-
并发标记:与应用线程并行,标记引用链
-
重新标记:STW暂停,修正并发标记变更
-
并发清除:与应用线程并行,回收垃圾内存
-
-
特点:
-
低延迟优先:减少STW时间
-
内存碎片问题(需定期Full GC整理)
-
并发失败风险(Concurrent Mode Failure)
-
-
启用参数 :
-XX:+UseConcMarkSweepGC
三、全堆回收器
7. G1 收集器(Garbage-First)

-
目标代际:新生代 + 老年代(全堆)
-
核心设计:
-
分区模型:将堆划分为2048个等大Region(1MB~32MB)
-
回收策略:
-
年轻代回收:STW暂停,复制算法
-
混合回收:回收老年代高收益Region
-
Full GC:Serial Old作为后备
-
-
-
四阶段标记:
-
初始标记:STW,标记GC Roots
-
并发标记:并行标记引用链
-
最终标记:STW,处理SATB队列
-
筛选回收:STW,按价值排序回收Region
-
-
特点:
-
可预测停顿 :
-XX:MaxGCPauseMillis=200
-
内存整理:避免碎片
-
JDK9+默认回收器
-
-
启用参数 :
-XX:+UseG1GC
四、回收器搭配与代际关系
回收器组合 | 新生代 | 老年代 | 启用参数 |
---|---|---|---|
Serial + Serial Old | Serial | Serial Old | -XX:+UseSerialGC |
ParNew + CMS | ParNew | CMS | -XX:+UseParNewGC -XX:+UseConcMarkSweepGC |
Parallel Scavenge + Parallel Old | Parallel Scavenge | Parallel Old | -XX:+UseParallelGC -XX:+UseParallelOldGC |
G1 | 内置年轻代模式 | 内置老年代模式 | -XX:+UseG1GC |
五、常见问题总结
Q:Serial收集器如何工作?
A:
目标代际:新生代
算法:标记-复制算法
流程:
STW暂停所有线程
单线程标记存活对象
存活对象复制到Survivor区
年龄+1,超阈值晋升老年代
清空Eden和From Survivor
特点:简单高效,适合客户端应用
Q:CMS的四个阶段是什么?
A:
初始标记:STW暂停,标记GC Roots直接引用(快)
并发标记:与应用并行,遍历对象图(长)
重新标记:STW暂停,修正并发期间变更(中)
并发清除:与应用并行,回收垃圾内存(长)
Q:G1如何实现可预测停顿?
A: 三步机制:
堆分区:划分为等大Region(默认2048个)
回收价值计算:优先回收垃圾最多(Garbage-First)Region
停顿预测模型:基于历史GC数据预测回收时间
六、关键概念解析
-
STW(Stop-The-World) :
垃圾回收时暂停所有应用线程,保证一致性
-
晋升阈值(Tenuring Threshold) :
对象从新生代晋升老年代的年龄(默认15次GC)
-
SATB(Snapshot-At-The-Beginning) :
G1在并发标记开始时建立对象图快照,解决漏标问题
-
记忆集(Remembered Set) :
记录Region间引用关系,避免全堆扫描(G1核心数据结构)