G1是JDK 9+默认垃圾回收器,通过-XX:+UseG1GC启用,以Region划分堆内存,基于-XX:MaxGCPauseMillis目标动态优先回收高收益Region,实现可预测低延迟;调优需固定堆大小、合理设停顿目标及关注Humongous对象。

Java 中使用 G1 垃圾回收器不需要手动编码调用,而是通过 JVM 启动参数启用和调优。G1(Garbage-First)是 JDK 9 及以后的默认垃圾回收器(JDK 8 需显式开启),设计目标是兼顾吞吐量与低延迟,适合大堆(如 4GB 以上)且对停顿时间有要求的应用。
启用 G1 回收器
在启动 Java 应用时,添加以下参数即可启用 G1:
- -XX:+UseG1GC:强制启用 G1(JDK 8u40+ 推荐;JDK 9+ 默认启用,此参数可省略但建议保留以明确意图)
- 无需额外指定新生代/老年代大小,G1 会自动分区管理(Region-based)
设置关键目标:停顿时间
G1 的核心优势是“可预测停顿”,通过设定最大停顿时间目标来驱动回收行为:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- -XX:MaxGCPauseMillis=200:建议值 100–500 毫秒,G1 会尽量让单次 GC 停顿不超过该值(不是硬性保证,而是优化目标)
- 值设得太小会导致 GC 频繁、吞吐下降;设得太大可能降低响应性
常用调优参数(按需添加)
多数场景下仅设 -XX:+UseG1GC 和 -XX:MaxGCPauseMillis 即可,复杂场景可补充:
立即学习“Java免费学习笔记(深入)”;
- -Xms4g -Xmx4g:建议初始堆与最大堆设为相同值,避免动态扩容影响 G1 分区稳定性
- -XX:G1HeapRegionSize=2M:手动设置 Region 大小(1M–4M),默认由堆大小自动推导,一般不需修改
- -XX:G1NewSizePercent=20 -XX:G1MaxNewSizePercent=40:控制新生代占比范围(默认 5%–60%,可根据对象生命周期调整)
- -XX:G1MixedGCCountTarget=8:控制混合回收(Mixed GC)中并发清理老年代 Region 的轮数,影响老年代回收节奏
验证与监控
确认 G1 是否生效并观察行为:
- 加参数 -XX:+PrintGCDetails -Xloggc:gc.log(JDK 9+ 推荐用
-Xlog:gc*:gc.log) - 日志中看到 G1 Young Generation 或 G1 Mixed GC 即表示运行正常
- 配合
jstat -gc <pid>查看 Eden/Survivor/Occupancy 等指标,关注G1-YGC和G1-MIXED-GC次数与耗时

















