ZGC超低延迟垃圾回收器
ZGC超低延迟垃圾回收器
ZGC是JDK11引入的超低延迟垃圾回收器,通过染色指针和读屏障实现亚毫秒级GC暂停。
核心特性
/**
* ZGC核心特点:
* 1. 暂停时间 < 1ms(亚毫秒级)
* 2. 支持TB级堆内存
* 3. 暂停时间不随堆大小增长
* 4. 适用于延迟敏感的应用
*/
启用ZGC
# 基本配置
java -XX:+UseZGC -jar app.jar
# 完整配置
java -XX:+UseZGC \
-Xms16g -Xmx16g \
-XX:SoftMaxHeapSize=14g \
-XX:ConcGCThreads=4 \
-XX:ZCollectionInterval=5 \
-XX:+ZGenerational \
-jar app.jar
ZGC配置参数
# 内存设置
-Xms16g -Xmx16g # 堆大小
-XX:SoftMaxHeapSize=14g # 软上限,尽量不超过
# 并发线程
-XX:ConcGCThreads=4 # 并发GC线程数
-XX:ParallelGCThreads=8 # 并行GC线程数
# 触发间隔
-XX:ZCollectionInterval=5 # 每5秒主动触发一次GC
# 分代ZGC(JDK21+)
-XX:+ZGenerational # 启用分代模式
分代ZGC
// JDK21引入分代ZGC,进一步提升性能
// -XX:+ZGenerational
// 分代ZGC优势:
// 1. 更好的内存回收效率
// 2. 更低的内存占用
// 3. 更高的吞吐量
监控ZGC
# GC日志
java -Xlog:gc* -XX:+UseZGC -jar app.jar
# 输出示例:
# [2024-01-15T10:30:00.123+0800][0.567s][info][gc] GC(1) Pause Mark End 0.234ms
# [2024-01-15T10:30:00.567+0800][1.001s][info][gc] GC(2) Concurrent Mark 12.345ms
JMX监控
@Component
public class ZGCMonitor {
@Scheduled(fixedRate = 5000)
public void monitorZGC() {
List<GarbageCollectorMXBean> gcBeans =
ManagementFactory.getGarbageCollectorMXBeans();
for (GarbageCollectorMXBean gcBean : gcBeans) {
if (gcBean.getName().contains("ZGC")) {
log.info("ZGC: Collections={}, AvgPause={}ms",
gcBean.getCollectionCount(),
gcBean.getCollectionTime() / Math.max(1, gcBean.getCollectionCount()));
}
}
}
}
ZGC vs G1对比
| 特性 | ZGC | G1 |
|---|---|---|
| 暂停时间 | < 1ms | 50-200ms |
| 吞吐量 | 中等 | 高 |
| 堆大小 | TB级 | 数十GB |
| 内存开销 | 较高(5-10%) | 中等(5%) |
| 适用场景 | 超低延迟 | 通用场景 |
适用场景
/**
* 适合使用ZGC的场景:
* 1. 交易系统:要求亚毫秒级响应
* 2. 实时计算:不允许GC暂停
* 3. 大数据处理:TB级堆内存
* 4. 金融系统:严格的延迟SLA
*/
小结
ZGC通过染色指针和读屏障技术实现了亚毫秒级GC暂停,是延迟敏感应用的理想选择。