前言

为防止家宽炸膛 我去雨云搞了台2C4G的机器 像SkyServer这样的最少也需要4C8G才能跑起来 我是如何顶级优化的呢 请看Jar

正文

java -Xms4096M -Xmx4096M -XX:+AlwaysPreTouch -XX:+DisableExplicitGC -XX:+ParallelRefProcEnabled -XX:+PerfDisableSharedMem -XX:+UnlockExperimentalVMOptions -XX:+UseG1GC -XX:G1HeapRegionSize=8M -XX:G1HeapWastePercent=5 -XX:G1MaxNewSizePercent=40 -XX:G1MixedGCCountTarget=4 -XX:G1MixedGCLiveThresholdPercent=90 -XX:G1NewSizePercent=30 -XX:G1RSetUpdatingPauseTimePercent=5 -XX:G1ReservePercent=20 -XX:InitiatingHeapOccupancyPercent=15 -XX:MaxGCPauseMillis=200 -XX:MaxTenuringThreshold=1 -XX:SurvivorRatio=32 -Dusing.aikars.flags=https://mcflags.emc.gs -Daikars.new.flags=true -jar server.jar --nogui

1. 内存设置

  • -Xms4096M: 初始堆内存大小 4GB

  • -Xmx4096M: 最大堆内存大小 4GB

  • 两者相等可以避免运行时动态调整堆大小,提高性能

2. JVM 优化参数

  • -XX:+AlwaysPreTouch: 启动时预先分配并初始化所有内存,提高性能稳定性

  • -XX:+DisableExplicitGC: 禁用显式 GC 调用(如 System.gc())

  • -XX:+ParallelRefProcEnabled: 并行处理引用,加快 GC 速度

  • -XX:+PerfDisableSharedMem: 禁用性能统计共享内存

3. G1GC 垃圾回收器配置

启用 G1GC 并进行了精细调优:

  • -XX:G1HeapRegionSize=8M: G1 区域大小 8MB

  • -XX:G1HeapWastePercent=5: 堆浪费百分比 5%

  • -XX:G1MaxNewSizePercent=40: 最大新生代占比 40%

  • -XX:G1MixedGCCountTarget=4: 混合 GC 目标次数

  • -XX:G1MixedGCLiveThresholdPercent=90: 混合 GC 存活对象阈值 90%

  • -XX:G1NewSizePercent=30: 初始新生代占比 30%

  • -XX:G1RSetUpdatingPauseTimePercent=5: RSet 更新暂停时间百分比

  • -XX:G1ReservePercent=20: 预留内存百分比 20%

  • -XX:InitiatingHeapOccupancyPercent=15: 触发并发 GC 的堆占用率 15%

  • -XX:MaxGCPauseMillis=200: 目标最大 GC 暂停时间 200ms

  • -XX:MaxTenuringThreshold=1: 对象晋升老年代的最大年龄

  • -XX:SurvivorRatio=32: 幸存区比例

4. 来源标识

  • -Dusing.aikars.flags=https://mcflags.emc.gs: 标记这些参数来自 Aikar 的优化建议

  • -Daikars.new.flags=true: 表明使用的是新版标志

5. 服务器启动

  • -jar server.jar: 运行 server.jar 文件

  • --nogui: 以无界面模式启动(适合服务器环境)