核心内容摘要
5个核心步骤:WarcraftHelper优化工具实现游戏性能提升指南
JVM 参数配置指南内存调优、收集器选择与问题排查核心前提JVM 参数的通用格式标准参数以-开头如-version所有 JVM 实现都支持非标准参数以-X开头如-XmsHotSpot 主流支持不保证跨版本兼容高级参数以-XX开头如-XX:Us
GC用于精细调优/-表示启用 / 禁用某个特性表示赋值。
内存配置参数最核心必掌握用于调整 JVM 各内存区域的大小是调优的第一步重点关注堆、元空间、栈的配置。
堆内存参数控制新生代 老年代参数作用默认值HotSpot示例-Xms堆初始大小新生代 老年代建议与-Xmx设为相同避免动态扩容触发 GC物理内存的 1/64最小 1MB-Xms2G初始堆 2GB-Xmx堆最大大小JVM 堆内存的上限物理内存的 1/4最大 1GB-Xmx4G最大堆 4GB-Xmn新生代大小EdenS0S1优先级高于NewRatio堆大小的 1/3由NewRatio控制-Xmn1G新生代 1GB-XX:NewRatio新生代老年代的比例如 2→1:2仅在未设-Xmn时生效2新生代 1/3老年代 2/3-XX:NewRatio31:3-XX:SurvivorRatioEden:S0/S1 的比例如 8→Eden 占 8/10S0/S1 各占 1/108-XX:SurvivorRatio66:1:1-XX:MaxTenuringThreshold对象从新生代进入老年代的年龄阈值每次 Minor GC 存活 115-XX:MaxTenuringThreshold88 次 GC 后进入老年代建议# 生产环境通用配置4核8G服务器java -Xms4G -Xmx4G -Xmn
5G -XX:SurvivorRatio8-jar app.jarXmsXmx避免堆动态扩容扩容时触发 Full GC新生代占堆的 1/3~1/2适配 “对象朝生夕死” 的特点减少 Major GC阈值根据业务调整短生命周期对象多则降低阈值如 8长生命周期多则提高如 15。
元空间方法区参数JDK8参数作用默认值示例-XX:MetaspaceSize元空间初始大小达到该值触发元空间 GC21MB64 位-XX:MetaspaceSize128M-XX:MaxMetaspaceSize元空间最大大小默认无上限易导致本地内存溢出无上限-XX:MaxMetaspaceSize256M-XX:MinMetaspaceFreeRatio元空间 GC 后空闲空间占比最小值低于则扩容40-XX:MinMetaspaceFreeRatio50-XX:MaxMetaspaceFreeRatio元空间 GC 后空闲空间占比最大值高于则缩容70-XX:MaxMetaspaceFreeRatio80建议# 防止元空间溢出动态生成类多的场景如Spring Boot、CGLIBjava -XX:MetaspaceSize128M -XX:MaxMetaspaceSize256M -jar app.jar
线程栈参数参数作用默认值64 位示例-Xss每个线程的虚拟机栈大小1MB-Xss512K建议高并发场景如 Netty、Tomcat可减小-Xss如 512K避免创建大量线程时栈内存溢出递归深度大的场景需增大-Xss如 2MB避免StackOverflowError。
直接内存参数NIO 使用参数作用默认值示例-XX:MaxDirectMemorySize直接内存上限默认与堆最大值一致等于-Xmx的值-XX:MaxDirectMemorySize2G建议NIO 密集型应用如网络通信、文件读写需单独配置避免直接内存溢出。
垃圾收集器配置参数用于指定使用的 GC 收集器不同收集器适配不同业务场景需按 “吞吐量 / 延迟” 需求选择。
收集器选择参数参数作用适用场景示例-XX:UseSerialGC启用串行收集器SerialGCSerialOldGC客户端 / 单核 / 低配置-XX:UseSerialGC-XX:UseParallelGC启用并行新生代收集器ParallelGC默认搭配 ParallelOldGC高吞吐量批处理、数据计算-XX:UseParallelGC-XX:UseParallelOldGC启用并行老年代收集器与 ParallelGC 搭配高吞吐量-XX:UseParallelOldGC-XX:UseConcMarkSweepGC启用 CMS 收集器老年代新生代默认搭配 ParallelGC低延迟Web 服务、电商-XX:UseConcMarkSweepGC-XX:Us
GC启用 G1 收集器全堆JDK9 默认通用场景JDK8 服务器端-XX:Us
GC-XX:UseZGC启用 ZGC 收集器全堆JDK11 支持超低延迟 / 超大堆百 G 级-XX:UseZGC组合示例# 高吞吐量场景JDK8java -Xms4G -Xmx4G -XX:UseParallelGC -XX:UseParallelOldGC -jar app.jar# 低延迟场景JDK8java -Xms4G -Xmx4G -XX:UseConcMarkSweepGC -XX:UseParNewGC -jar app.jar# 通用场景JDK11java -Xms4G -Xmx4G -XX:Us
GC -jar app.jar# 超大堆低延迟场景JDK17java -Xms32G -Xmx32G -XX:UseZGC -jar app.jar
收集器调优参数针对特定 GC1G1GC 专属参数JDK8 主流参数作用示例-XX:G1HeapRegionSiz
堆分区大小1MB~32MB默认根据堆大小自动计算-XX:G1HeapRegionSize4M-XX:MaxGCPauseMillisG1 目标最大 STW 时间仅为建议值不保证-XX:MaxGCPauseMillis200200ms-XX:G1NewSizePercent新生代最小占比-XX:G1NewSizePercent5-XX:G1MaxNewSizePercent新生代最大占比-XX:G1MaxNewSizePercent602CMS 专属参数CMS是 HotSpot 虚拟机中专门针对老年代设计的并发垃圾回收器也是 JVM 中首个实现低延迟、大部分阶段与业务线程并发执行的回收器核心定位是以牺牲部分吞吐量和内存碎片为代价大幅降低 Full GC 带来的 STW 时间适配对响应延迟敏感的业务场景。
参数作用示例-XX:CMSInitiatingOccupancyFractionCMS 触发阈值老年代使用率默认 92%-XX:CMSInitiatingOccupancyFraction80-XX:CMSParallelRemarkEnabledCMS 标记阶段启用多线程减少 STW 时间-XX:CMSParallelRemarkEnabled-XX:UseCMSCompactAtFullCollectionFull GC 后整理内存避免碎片-XX:UseCMSCompactAtFullCollection
GC 日志配置参数排查问题必配用于输出 GC 日志分析 GC 频率、STW 时间、内存使用情况是排查内存泄漏、GC 频繁的核心手段。
核心日志参数组合java -Xms4G -Xmx4G -XX:Us
GC\# 启用GC日志-XX:PrintGCDetails\-XX:PrintGCDateStamps\-XX:PrintGCTimeStamps\# 输出日志到文件按大小切割保留10个文件每个最大100MB-Xloggc:/var/log/app/gc.log\-XX:UseGCLogFileRotation\-XX:NumberOfGCLogFiles10\-XX:GCLogFileSize100M\# 打印堆内存使用情况-XX:PrintHeapAtGC\# 打印STW时间-XX:PrintGCApplicationStoppedTime\-jar app.jar关键参数说明参数作用-XX:PrintGCDetails打印详细 GC 日志回收区域、大小、耗时-XX:PrintGCDateStamps打印 GC 发生的日期时间如
T10:00:
0