📚 残梦三生

记录技术成长,分享学习心得

← 返回首页

Garbage First收集器

分类:Java | 日期:2023-12-07

什么是 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 的适用场景

G1 的参数配置

# 设置最大停顿时间
-XX:MaxGCPauseMillis=200

# 设置 Region 大小
-XX:G1HeapRegionSize=16m

# 启用 G1
-XX:+UseG1GC

总结

G1 收集器是现代 Java 应用的理想选择,它在吞吐量和延迟之间取得了良好的平衡。