内存优化指令解析

📋 配置总览与源码解析

♻️

G1GC - 适用于Java8版本优化

[选下面的不要选我]

-XX:+IgnoreUnrecognizedVMOptions -XX:+UnlockExperimentalVMOptions -XX:+AlwaysPreTouch -XX:+DisableExplicitGC -XX:+UseG1GC -XX:MaxGCPauseMillis=100 -XX:G1HeapRegionSize=4M -XX:G1NewSizePercent=100 -XX:G1MaxNewSizePercent=100 -XX:+AlwaysTenure -XX:-G1UseAdaptiveIHOP -XX:InitiatingHeapOccupancyPercent=80 -XX:G1MixedGCLiveThresholdPercent=95 -XX:+ParallelRefProcEnabled
🔍 逐行参数解析(点击展开)

-XX:+IgnoreUnrecognizedVMOptions

忽略无法识别的VM选项,确保配置在不同JDK版本间的兼容性

-XX:+UnlockExperimentalVMOptions

解锁实验性VM选项,允许使用非标准参数

-XX:+AlwaysPreTouch

启动时预先触碰所有内存页,减少运行时的缺页中断,提升启动后性能稳定性

-XX:+DisableExplicitGC

禁用显式GC调用(System.gc()),防止插件不当调用导致卡顿

-XX:+UseG1GC

启用G1垃圾收集器,适用于大堆内存(>4GB)的低延迟场景

-XX:MaxGCPauseMillis=100

设置最大GC暂停时间为100毫秒,平衡吞吐量与延迟

-XX:G1HeapRegionSize=4M

设置G1区域大小为4MB,优化大对象分配性能

-XX:G1NewSizePercent=100 / -XX:G1MaxNewSizePercent=100

新生代大小占比固定为100%,最大化年轻代空间以减少晋升到老年代的对象

-XX:+AlwaysTenure

对象在Survivor区存活即晋升到老年代,减少Survivor区拷贝开销

-XX:-G1UseAdaptiveIHOP

关闭自适应IHOP(初始堆占用百分比),使用固定阈值控制并发标记启动

-XX:InitiatingHeapOccupancyPercent=80

当堆占用达到80%时启动并发标记周期,提前开始垃圾回收防止内存不足

-XX:G1MixedGCLiveThresholdPercent=95

混合GC时只回收存活率低于95%的区域,提高回收效率

-XX:+ParallelRefProcEnabled

并行处理引用(软/弱/虚引用),加速GC过程中的引用清理

💡 适用场景:Java 8-11、中等规模服务器(20-50人)、1.12.2/1.16.5等旧版Mod服

ZGC - 适用于Java21+版本优化

[选下面的不要选我]

-XX:+IgnoreUnrecognizedVMOptions -XX:+UnlockExperimentalVMOptions -XX:+AlwaysPreTouch -XX:+DisableExplicitGC -XX:-UseG1GC -XX:+UseZGC -XX:+ZGenerational -XX:-ZProactive --add-modules jdk.incubator.vector
🔍 逐行参数解析(点击展开)

-XX:+IgnoreUnrecognizedVMOptions / -XX:+UnlockExperimentalVMOptions

同上,确保兼容性与实验特性支持

-XX:+AlwaysPreTouch / -XX:+DisableExplicitGC

同上,预触碰内存+禁用显式GC

-XX:-UseG1GC

显式关闭G1GC,确保切换到ZGC

-XX:+UseZGC

启用Z垃圾收集器,提供亚毫秒级(<1ms)暂停时间

-XX:+ZGenerational

启用分代ZGC,将堆分为年轻代和老年代,提升短期对象的回收效率(Java 21+特性)

-XX:-ZProactive

关闭ZGC的主动GC,仅在必要时才执行GC,减少不必要的CPU消耗

–add-modules jdk.incubator.vector

添加向量API模块(孵化中),利用SIMD指令加速向量计算,提升游戏性能

💡 适用场景:Java 21+、原版服务器、轻量Mod服、对延迟敏感(PVP/生电)

推荐

🎯

ZGC - 内存紧凑型 - 适用于Java21+版本优化

[选下面的不要选我]

✅️乌托邦等高版本服务端可以选这个,实测内存消耗减少 50%!

-XX:+IgnoreUnrecognizedVMOptions -XX:+UnlockExperimentalVMOptions -XX:+AlwaysPreTouch -XX:+DisableExplicitGC -XX:-UseG1GC -XX:+UseZGC -XX:+ZGenerational -XX:-ZProactive -XX:ZCollectionIntervalMinor=0.95 -XX:ZUncommitDelay=2 --add-modules jdk.incubator.vector
🔍 逐行参数解析(点击展开/收起)

基础参数与ZGC标准版相同,以下是内存优化特有参数

-XX:ZCollectionIntervalMinor=0.95

设置次要GC(年轻代)的收集间隔为内存使用率达到95%,更频繁地回收短期对象,防止内存快速膨胀

-XX:ZUncommitDelay=2

将未使用内存归还给操作系统的延迟设为2秒(默认300秒),更快释放空闲内存,显著降低RSS内存占用

🎮 实测效果:乌托邦整合包(1.20.1)+ 20人同时在线

  • 默认ZGC:内存占用 24-28GB
  • 紧凑版ZGC:内存占用 12-14GB(节省约50%)
  • 暂停时间:均保持在1ms以内

💡 适用场景:Java 21+、大型Mod整合包(乌托邦/RLCraft等)、内存受限的VPS、长期运行服务器

⚠️ 重要使用须知

  1. Java版本严格匹配:G1GC方案仅适用于Java 8-11,ZGC方案仅适用于Java 21+,混用会导致启动失败
  2. 内存分配建议:虽然ZGC支持TB级堆内存,但建议MC服务器仍按玩家数分配(原版4-6GB,大型Mod 16GB+)
  3. 紧凑版副作用:更频繁的GC可能导致CPU占用略高(约5-10%),建议在CPU核心充足(4核+)时使用
  4. 向量API:--add-modules jdk.incubator.vector为实验特性,如遇到启动警告可移除该参数
作者:xiaobei  创建时间:2026-02-15 19:15
最后编辑:xiaobei  更新时间:2026-02-16 17:52