基于 Java 17(G1GC)与 Java 21(ZGC)的分档内存配置
前言
在 Docker 面板服(如 Pterodactyl、1Panel、aaPanel 等)中运行 Forge / NeoForge 服务端时,JVM 参数不合理是导致 TPS 暴跌、卡顿、频繁 Full GC 甚至 OOM 崩溃的主因。
本文提供:
✅ Java 17 + G1GC(稳定、通用、推荐大多数服主)
✅ Java 21 + ZGC(低延迟、大内存首选)
✅ 8G / 12G / 16G / 24G / 32G 内存分档配置
✅ 可直接复制粘贴的完整启动参数
一、基础原则(必看)
1️⃣ Docker 内存 ≠ JVM 最大内存
2️⃣ Forge / NeoForge 特点
大量 反射 & ClassLoader
频繁 Gen0 / Young GC
区块加载 = 瞬时大对象
不建议过小 Survivor
二、Java 17(G1GC)配置(推荐)
✅ 适用场景
所有版本 Forge / NeoForge
内存 ≤ 24G
追求稳定
🔧 通用 G1GC 参数(不随内存变化)
-XX:+IgnoreUnrecognizedVMOptions
-XX:+UnlockExperimentalVMOptions
-Dfile.encoding=UTF-8
-Djava.awt.headless=true
-XX:+AlwaysPreTouch
-XX:+ExplicitGCInvokesConcurrent
-XX:ReservedCodeCacheSize=384M
-XX:+UseG1GC
-XX:+ParallelRefProcEnabled
-XX:MaxGCPauseMillis=25
-XX:GCPauseIntervalMillis=50
-XX:G1ConcMarkStepDurationMillis=5
-XX:G1RSetUpdatingPauseTimePercent=20
-XX:G1SATBBufferEnqueueingThresholdPercent=75
-XX:G1NewSizePercent=1
-XX:G1MaxNewSizePercent=100
-XX:SurvivorRatio=50
-XX:MaxTenuringThreshold=1
-XX:G1HeapRegionSize=32M
-XX:-G1UseAdaptiveIHOP
-XX:InitiatingHeapOccupancyPercent=66
-XX:G1MixedGCCountTarget=6
-XX:G1OldCSetRegionThresholdPercent=10
-XX:G1ExpandByPercentOfAvailable=0📌 分内存推荐配置
✅ 8G 内存
-Xms7G
-Xmx7G✅ 12G 内存
-Xms11G
-Xmx11G✅ 16G 内存(最推荐)
-Xms15G
-Xmx15G✅ 24G 内存
-Xms23G
-Xmx23G✅ 32G 内存(不建议单端)
-Xms30G
-Xmx30G⚠️ 超过 24G 建议 分服 / 多节点
三、Java 21(ZGC)配置(进阶)
✅ 适用场景
Java 21+
NeoForge 1.20.6+
大内存(≥16G)
追求 极低 GC 停顿
🔧 通用 ZGC 参数
-XX:+IgnoreUnrecognizedVMOptions
-XX:+UnlockExperimentalVMOptions
-Dfile.encoding=UTF-8
-Djava.awt.headless=true
-XX:+AlwaysPreTouch
-XX:+ExplicitGCInvokesConcurrent
-XX:ReservedCodeCacheSize=384M
-XX:+UseZGC
-XX:+ZGenerational
-XX:-ZProactive
-XX:ZYoungCompactionLimit=20
-XX:ZFragmentationLimit=20📌 分内存推荐配置
✅ 16G
-Xms14G
-Xmx14G✅ 24G
-Xms22G
-Xmx22G✅ 32G
-Xms28G
-Xmx28G⚠️ ZGC 对 CPU 单核性能 敏感,E5 老U 慎选
四、Docker 面板服注意事项
✅ 必须设置
✅ Docker 示例(片段)
mem_limit: 16g
memswap_limit: 16g
ulimits:
nofile:
soft: 102400
hard: 102400五、Forge / NeoForge 额外建议
✅ 关闭原生 GC 触发
-XX:+DisableExplicitGC✅ 避免 OOM Killer
-XX:+ExitOnOutOfMemoryError✅ 开启 GC 日志(调试用)
-Xlog:gc*:logs/gc.log:time,uptime,level,tags六、如何选择?(速查表)
七、结语
JVM 调优不是玄学,而是减少无效停顿、提高 TPS 的最有效手段。