|

基于 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 最大内存

项目

建议

Docker 限制内存

Xmx + 1~2GB

JVM Xmx

留给系统 1–2GB

示例

宿主机 16G → Docker 15G → Xmx14G

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 面板服注意事项

✅ 必须设置

项目

建议值

ulimit nofile

≥ 102400

swap

关闭

CPU 绑定

固定核心

Java 版本

明确指定

✅ 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

六、如何选择?(速查表)

内存

Java

GC

推荐指数

≤16G

17

G1GC

⭐⭐⭐⭐⭐

≥16G

21

ZGC

⭐⭐⭐⭐

模组 >300

17

G1GC

⭐⭐⭐⭐⭐

生电服

21

ZGC

⭐⭐⭐⭐


七、结语

JVM 调优不是玄学,而是减少无效停顿、提高 TPS 的最有效手段。

评论交流

文章目录