java中g1如何使用
G1 垃圾收集器基础
G1(Garbage-First)是 Java 9 及以后版本的默认垃圾收集器,适用于大内存、低延迟场景。它通过将堆划分为多个大小相等的 Region,优先回收垃圾最多的 Region(Garbage-First 原则)来优化性能。
启用 G1 垃圾收集器
在启动 JVM 时添加以下参数启用 G1:
-XX:+UseG1GC
关键参数配置
堆内存设置
-Xms4g -Xmx4g
设置初始堆和最大堆大小(示例为 4GB),避免动态调整开销。
最大 GC 暂停目标
-XX:MaxGCPauseMillis=200
设置期望的最大 GC 停顿时间(毫秒),G1 会尽力达成但不保证。
并行 GC 线程数
-XX:ParallelGCThreads=4
根据 CPU 核心数调整,通常设置为逻辑处理器数量。
并发标记线程数
-XX:ConcGCThreads=2
控制并发标记阶段的线程数,建议为 ParallelGCThreads 的 1/4。

Region 大小设置
-XX:G1HeapRegionSize=4m
手动指定 Region 大小(1MB~32MB),通常自动计算即可。
高级调优参数
混合收集周期设置
-XX:G1MixedGCCountTarget=8
设置混合 GC 阶段的回收次数,默认 8 次。
存活对象阈值
-XX:G1HeapWastePercent=5
当可回收空间达到堆的 5% 时触发混合 GC。

老年代回收阈值
-XX:InitiatingHeapOccupancyPercent=45
当老年代占用达到堆的 45% 时启动并发标记周期。
监控与诊断
添加以下参数获取 GC 日志:
-Xlog:gc*:file=gc.log:time:filecount=5,filesize=10M
使用 JVM 工具观察:
jstat -gc <pid> 1000
jcmd <pid> GC.heap_info
典型场景配置示例
内存密集型应用
-XX:+UseG1GC -Xms8g -Xmx8g
-XX:MaxGCPauseMillis=150
-XX:InitiatingHeapOccupancyPercent=35
低延迟要求系统
-XX:+UseG1GC -Xmx4g
-XX:MaxGCPauseMillis=50
-XX:G1NewSizePercent=30
-XX:G1MaxNewSizePercent=60
注意事项
- 避免频繁调整 MaxGCPauseMillis,过小值会导致 GC 开销上升
- 大堆场景建议设置 -XX:G1ReservePercent=10 预留空间
- 对于超大规模堆(>100GB),考虑 ZGC 或 Shenandoah
- 定期分析 GC 日志,使用工具如 GCViewer 或 GCEasy






