# OMCF **Repository Path**: cppbear/OMCF ## Basic Information - **Project Name**: OMCF - **Description**: 仅作为 https://github.com/Yukiriri/OMCF 的同步仓库 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-08-07 - **Last Updated**: 2025-08-07 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # OMCF 吸收了各种MC调优后再进行重新定制的MC JVM参数,将同时研究服务端和客户端的方案。 如果遇到问题或者有更好的调优,欢迎提出。 # G1GC - 方便写入文件使用 ``` -XX:+IgnoreUnrecognizedVMOptions -XX:+UnlockExperimentalVMOptions -Dfile.encoding=UTF-8 -XX:+AlwaysPreTouch -XX:+DisableExplicitGC -XX:MaxDirectMemorySize=1024G -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 -XX:+UnlockExperimentalVMOptions -Dfile.encoding=UTF-8 -XX:+AlwaysPreTouch -XX:+DisableExplicitGC -XX:MaxDirectMemorySize=1024G -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 ``` - [运行效果](./test-summary-g1gc.md) - [参数讲解](./explain-g1gc.md) > [!IMPORTANT] > Windows需要注意行尾必须为LF > [!NOTE] > 服务端、客户端、Velocity通用 > [!TIP] > 如果使用Java17+ > 还可以再添加`--add-modules jdk.incubator.vector` # ZGC - 方便写入文件使用 ``` -XX:+IgnoreUnrecognizedVMOptions -XX:+UnlockExperimentalVMOptions -Dfile.encoding=UTF-8 -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 -XX:+AlwaysPreTouch -XX:+DisableExplicitGC -XX:MaxDirectMemorySize=1024G -XX:-UseG1GC -XX:+UseZGC -XX:+ZGenerational -XX:-ZProactive --add-modules jdk.incubator.vector ``` > [!IMPORTANT] > Windows需要注意行尾必须为LF > [!NOTE] > 服务端、客户端、Velocity通用 > [!IMPORTANT] > 需要Java21+ # G1GC-内存紧凑模式 先天不合适,做不了 # ZGC-内存紧凑模式 - 方便写入文件使用 ``` -XX:+IgnoreUnrecognizedVMOptions -XX:+UnlockExperimentalVMOptions -Dfile.encoding=UTF-8 -XX:+AlwaysPreTouch -XX:+DisableExplicitGC -XX:MaxDirectMemorySize=1024G -XX:-UseG1GC -XX:+UseZGC -XX:+ZGenerational -XX:-ZProactive -XX:ZCollectionIntervalMinor=0.95 -XX:ZUncommitDelay=2 --add-modules jdk.incubator.vector ``` - 方便命令行使用 ``` -XX:+IgnoreUnrecognizedVMOptions -XX:+UnlockExperimentalVMOptions -Dfile.encoding=UTF-8 -XX:+AlwaysPreTouch -XX:+DisableExplicitGC -XX:MaxDirectMemorySize=1024G -XX:-UseG1GC -XX:+UseZGC -XX:+ZGenerational -XX:-ZProactive -XX:ZCollectionIntervalMinor=0.95 -XX:ZUncommitDelay=2 --add-modules jdk.incubator.vector ``` > [!IMPORTANT] > Windows需要注意行尾必须为LF > [!NOTE] > 服务端、客户端、Velocity通用,但最适合客户端 > [!IMPORTANT] > 需要Java21+ # 使用方式 - 服务端 - 如果使用Java8,则只有一种方式 - 将JVM参数添加到启动命令行 - 如果使用Java9+,则多一种方式 - 写入到文件里并在启动命令行引用 - 使用jar启动的核心适合写入自定义文件 - 高版本纯ModLoader适合写入到`user_jvm_args.txt` - 客户端 添加到启动器自定义JVM参数 需要注意删除启动器已有的`-XX:+UseG1GC` > [!NOTE] > 你是说,怎么在启动命令行引用? > 比如在`my_args.txt`里填写好了上面的参数 > 然后启动命令就这样写 > ``` > java @my_args.txt -jar server.jar > ``` # bin目录脚本 - [使用文档](./omcsl.md) ## 推荐JDK - [Liberica](https://bell-sw.com/pages/downloads/) - [Temurin](https://adoptium.net/zh-CN/temurin/releases/) - [Zulu](https://www.azul.com/downloads/?package=jdk#zulu) ## 一点MC内存经验 MC一般值得计算的Java内存有 - 堆内存(Xmx) - 非堆内存(Metaspace,Code Cache,...) - 外界API管理的内存 估算方式例如: - 给服务端-Xmx4G,运行期占用大概是(堆4G + 非堆1G = 5G占用) - 给客户端-Xmx4G,运行期占用大概是(堆4G + 非堆1G + OpenGL 2G = 7G占用) ## 学习参考 - [Aikar's Flags](https://aikar.co/2018/07/02/tuning-the-jvm-g1gc-garbage-collector-flags-for-minecraft) - [VM Options Explorer](https://chriswhocodes.com/vm-options-explorer.html) - [ZGC OpenJDK Wiki](https://wiki.openjdk.org/display/zgc) - [https://pdai.tech/md/java/jvm/java-jvm-gc-g1.html](https://pdai.tech/md/java/jvm/java-jvm-gc-g1.html) ## GC经验总结 - 关于2大GC - G1GC G1GC的设计理念是清大垃圾留小垃圾 所以G1GC对垃圾的回收并不彻底,会有一些甚至明显的内存浪费 - ZGC ZGC则是全新设计了内存分配和回收方式 对象的分配不再无脑向后开辟,所以内存开销可以尽可能最小化 ## Stargazers [![Stargazers](https://starchart.cc/Yukiriri/OMCF.svg?variant=adaptive)]()