Skip to content

Yukiriri/OMCF

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

46 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

OMCF

吸收了各种MC调优后再进行重新定制的MC JVM参数,将同时研究服务端和客户端的方案。
如果遇到问题或者有更好的调优,欢迎提出。

G1GC

  • 方便写入文件使用
-XX:+IgnoreUnrecognizedVMOptions
-XX:+UnlockExperimentalVMOptions
-Dfile.encoding=UTF-8
-Djava.awt.headless=true

-XX:+AlwaysPreTouch
-XX:+DisableExplicitGC
-XX:MaxDirectMemorySize=1024G

-XX:+UseG1GC
-XX:MaxGCPauseMillis=100
-XX:G1HeapRegionSize=8M
-XX:G1NewSizePercent=100
-XX:G1MaxNewSizePercent=100
-XX:+AlwaysTenure
-XX:-G1UseAdaptiveIHOP
-XX:InitiatingHeapOccupancyPercent=80
-XX:G1MixedGCLiveThresholdPercent=95
-XX:+ParallelRefProcEnabled

  • 方便命令行使用
-XX:+IgnoreUnrecognizedVMOptions -XX:+UnlockExperimentalVMOptions -Dfile.encoding=UTF-8 -Djava.awt.headless=true  -XX:+AlwaysPreTouch -XX:+DisableExplicitGC -XX:MaxDirectMemorySize=1024G  -XX:+UseG1GC -XX:MaxGCPauseMillis=100 -XX:G1HeapRegionSize=8M -XX:G1NewSizePercent=100 -XX:G1MaxNewSizePercent=100 -XX:+AlwaysTenure -XX:-G1UseAdaptiveIHOP -XX:InitiatingHeapOccupancyPercent=80 -XX:G1MixedGCLiveThresholdPercent=95 -XX:+ParallelRefProcEnabled 

Note

服务端、客户端、Velocity通用

Tip

如果使用Java17+
还可以再添加--add-modules jdk.incubator.vector

ZGC

  • 方便写入文件使用
-XX:+IgnoreUnrecognizedVMOptions
-XX:+UnlockExperimentalVMOptions
-Dfile.encoding=UTF-8
-Djava.awt.headless=true

-XX:+AlwaysPreTouch
-XX:+DisableExplicitGC
-XX:MaxDirectMemorySize=1024G

-XX:-UseG1GC
-XX:+UseZGC
-XX:+ZGenerational
-XX:-ZProactive

--add-modules jdk.incubator.vector

  • 方便命令行使用
-XX:+IgnoreUnrecognizedVMOptions -XX:+UnlockExperimentalVMOptions -Dfile.encoding=UTF-8 -Djava.awt.headless=true  -XX:+AlwaysPreTouch -XX:+DisableExplicitGC -XX:MaxDirectMemorySize=1024G  -XX:-UseG1GC -XX:+UseZGC -XX:+ZGenerational -XX:-ZProactive  --add-modules jdk.incubator.vector 

Important

需要Java21+

Note

服务端、客户端、Velocity通用

内存紧凑G1GC

  • 方便写入文件使用
-XX:+IgnoreUnrecognizedVMOptions
-XX:+UnlockExperimentalVMOptions
-Dfile.encoding=UTF-8
-Djava.awt.headless=true

-XX:+AlwaysPreTouch
-XX:+DisableExplicitGC
-XX:MaxDirectMemorySize=1024G

-XX:+UseG1GC
-XX:MaxGCPauseMillis=100
-XX:G1HeapRegionSize=8M
-XX:G1NewSizePercent=100
-XX:G1MaxNewSizePercent=100
-XX:+AlwaysTenure
-XX:-G1UseAdaptiveIHOP
-XX:InitiatingHeapOccupancyPercent=80
-XX:G1MixedGCLiveThresholdPercent=95
-XX:+ParallelRefProcEnabled

-XX:G1PeriodicGCInterval=1100
-XX:MinHeapFreeRatio=5
-XX:MaxHeapFreeRatio=5

  • 方便命令行使用
-XX:+IgnoreUnrecognizedVMOptions -XX:+UnlockExperimentalVMOptions -Dfile.encoding=UTF-8 -Djava.awt.headless=true  -XX:+AlwaysPreTouch -XX:+DisableExplicitGC -XX:MaxDirectMemorySize=1024G  -XX:+UseG1GC -XX:MaxGCPauseMillis=100 -XX:G1HeapRegionSize=8M -XX:G1NewSizePercent=100 -XX:G1MaxNewSizePercent=100 -XX:+AlwaysTenure -XX:-G1UseAdaptiveIHOP -XX:InitiatingHeapOccupancyPercent=80 -XX:G1MixedGCLiveThresholdPercent=95 -XX:+ParallelRefProcEnabled  -XX:G1PeriodicGCInterval=1100 -XX:MinHeapFreeRatio=5 -XX:MaxHeapFreeRatio=5 

Important

需要Java12+

Note

可以不需要设置-Xms
或者-Xms设置到比-Xmx更小

Note

服务端、客户端、Velocity通用,但最适合客户端

内存紧凑ZGC

  • 方便写入文件使用
-XX:+IgnoreUnrecognizedVMOptions
-XX:+UnlockExperimentalVMOptions
-Dfile.encoding=UTF-8
-Djava.awt.headless=true

-XX:+AlwaysPreTouch
-XX:+DisableExplicitGC
-XX:MaxDirectMemorySize=1024G

-XX:-UseG1GC
-XX:+UseZGC
-XX:+ZGenerational
-XX:-ZProactive

-XX:ZCollectionIntervalMinor=1.1
-XX:ZUncommitDelay=2

--add-modules jdk.incubator.vector

  • 方便命令行使用
-XX:+IgnoreUnrecognizedVMOptions -XX:+UnlockExperimentalVMOptions -Dfile.encoding=UTF-8 -Djava.awt.headless=true  -XX:+AlwaysPreTouch -XX:+DisableExplicitGC -XX:MaxDirectMemorySize=1024G  -XX:-UseG1GC -XX:+UseZGC -XX:+ZGenerational -XX:-ZProactive  -XX:ZCollectionIntervalMinor=1.1 -XX:ZUncommitDelay=2  --add-modules jdk.incubator.vector 

Important

需要Java21+

Note

可以不需要设置-Xms
或者-Xms设置到比-Xmx更小

Note

服务端、客户端、Velocity通用,但最适合客户端

选择推荐

使用方式

  • 服务端
    • Java <= 8
      • 将JVM参数添加到启动命令行
    • Java >= 9
      • 方式1:将JVM参数添加到启动命令行
      • 方式2:写入到文件里并在启动命令行引用
        • 高版本纯ModLoader可以写入到user_jvm_args.txt
        • 使用jar启动的核心就写入一个自定义名字的txt文件
  • 客户端
    添加到启动器自定义JVM参数
    需要注意删除启动器已有的-XX:+UseG1GC

Important

写入到txt时,Windows需要注意行尾必须为LF

Note

你是说,怎么在启动命令行引用?
比如在my_args.txt里填写好了上面的参数
然后启动命令就这样写

java @my_args.txt -jar server.jar

@my_args.txt一定要在-jar之前

bin目录脚本

推荐JDK

一点MC内存经验

MC一般值得计算的Java内存有

  • 堆内存(Xmx)
  • 非堆内存(Metaspace,Code Cache,...)
  • 外界API管理的内存

估算方式例如:

  • 给服务端-Xmx4G,运行期占用大概是(堆4G + 非堆1G = 5G占用)
  • 给客户端-Xmx4G,运行期占用大概是(堆4G + 非堆1G + OpenGL 2G = 7G占用)

学习参考

Stargazers

Stargazers

About

最优MC运行参数。Optimal Minecraft Flags.

Topics

Resources

Stars

Watchers

Forks