← 返回首页

ZGC超低延迟垃圾回收器

📂 java ⏱ 1 min 173 words

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暂停,是延迟敏感应用的理想选择。