java垃圾回收器切换需通过jvm启动参数中的-xx选项配置,不可运行时动态修改;常用参数包括-xx:+useserialgc、-xx:+useparallelgc、-xx:+useconcmarksweepgc(jdk8及以前)、-xx:+useg1gc(jdk9+默认)等,须注意版本兼容性。

Java 垃圾回收器(GC)的切换,是通过 JVM 启动参数中的 -XX 类高级选项完成的,不能在运行时动态修改。配置的关键是明确目标 GC 类型,并选用对应启用参数,同时注意 JDK 版本兼容性。
常用垃圾回收器启用参数
以下为各主流回收器对应的启动参数(以 HotSpot JVM 为准):
-
Serial 收集器:单线程,适合小内存、单核场景
-XX:+UseSerialGC -
Parallel(吞吐量优先)收集器:多线程并行,适合后台批处理
-XX:+UseParallelGC(新生代) + -XX:+UseParallelOldGC(老年代,JDK8+ 默认自动启用) -
CMS 收集器:已从 JDK9 起废弃,JDK14 彻底移除,不建议新项目使用
-XX:+UseConcMarkSweepGC(仅适用于 JDK8 及更早版本) -
G1 收集器:JDK9+ 默认,大堆、低延迟平衡场景首选
-XX:+UseG1GC - ZGC 或 Shenandoah:超低停顿( -XX:+UseZGC 或 -XX:+UseShenandoahGC
启动时添加参数的常见方式
参数必须写在 java 命令中 -jar 或主类名之前,顺序不影响启用效果:
Java项目代码review工具。分析Git变更+完整调用链路上下文,推断业务需求,进行多维度评分和分类汇总,生成完整PRD文档。包含细粒度Java代码审查清单(Null安全、异常处理、Streams、并发、equals/hashCode、资源管理、API设计、性能、MyBatis/ORM、事务边界、SQL/DD...
- 命令行直接启动:
java -XX:+UseG1GC -Xms2g -Xmx2g -jar myapp.jar - IDEA 中配置:
Run → Edit Configurations → VM Options 输入参数 - Spring Boot 启动脚本:
在java -jar后追加,如java -XX:+UseZGC -jar app.jar - Tomcat 部署:
修改catalina.sh(Linux)或catalina.bat(Windows),在JAVA_OPTS中添加
验证是否生效
启动时加上日志参数,可确认实际使用的 GC 类型:
- 查看默认/启用的 GC 参数:
java -XX:+PrintFlagsFinal -version | grep Use.*GC - 运行时打印 GC 信息:
-XX:+PrintGCDetails -XX:+PrintGCDateStamps,日志首行会显示类似Using G1或Using Parallel - 观察 GC 日志中的回收器标识:
G1 日志含G1 Young Generation或G1 Mixed GC;Parallel 日志含PSYoungGen和ParOldGen
注意事项
不同 GC 对应的调优参数风格差异较大,切换后需同步调整关键指标:
- G1 推荐用 -XX:MaxGCPauseMillis=200 设定目标停顿,而非手动设新生代大小(
-Xmn) - Parallel 收集器关注吞吐量,常用 -XX:MaxGCPauseMillis 不起作用,应配合 -XX:GCTimeRatio
- ZGC/Shenandoah 要求开启 -XX:+UnlockExperimentalVMOptions(JDK11–15 阶段),JDK17+ 已默认解锁
- 同一 JVM 进程中不可混用多个
-XX:+UseXXXGC参数,后出现的会覆盖前一个
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










