← 返回首页
Garbage First收集器
什么是 G1?
Garbage First (G1) 收集器是 JDK 7u4 版本之后提供的一款面向服务端的垃圾收集器,它不再采用传统分代模型中的物理隔离方式,而是基于 Region 的内存布局。
G1 的特点
1. 基于 Region 的内存布局
G1 将堆内存划分为多个大小相等的独立区域(Region),不再物理隔离年轻代和老年代。
2. 可预测的停顿时间模型
G1 可以设置预期的停顿时间,尽量在这个时间内完成垃圾收集。
3. 增量收集
G1 每次只收集部分 Region,而不是整个堆,从而减少停顿时间。
G1 的工作流程
1. 初始标记 (Initial Marking)
标记从 GC Root 开始直接可达的对象。
2. 并发标记 (Concurrent Marking)
在整个堆中查找存活对象,这个过程是并发执行的。
3. 最终标记 (Final Marking)
完成最后的标记工作。
4. 筛选回收 (Live Data Counting and Evacuation)
计算每个 Region 中存活对象的数量,并回收价值最高的 Region。
G1 的适用场景
- 堆内存较大的应用(通常 6GB 以上)
- 对停顿时间有严格要求的应用
- 多核 CPU 的服务器环境
G1 的参数配置
# 设置最大停顿时间
-XX:MaxGCPauseMillis=200
# 设置 Region 大小
-XX:G1HeapRegionSize=16m
# 启用 G1
-XX:+UseG1GC
总结
G1 收集器是现代 Java 应用的理想选择,它在吞吐量和延迟之间取得了良好的平衡。