JE教程

【转载】一个【效果明显】的Java8优化JVM参数

猫***Lv.3 中级会员 发表于 2022-8-14 IP:广东省 3,606 0
AI 速览2026-09-11 13:07 生成

转载一套针对 Java 8 的 JVM 优化参数,实测可降低 1.12 大型整合包卡顿并提升帧数

帖子转载自 MC 百科,作者汇总中外 JVM 参数讨论后给出一套完整的 Java 8 启动参数,并说明与启动器自带 G1GC 参数冲突时的处理办法、内存分配参数的补充写法。作者称在 1.12 的 500+ 模组整合包上实测,相比常用 G1GC 参数能明显减少卡顿跳帧、平均帧数提高约 10,内存占用偏高但接近爆满时仍能保持高帧率。适合使用 Java 8 玩大型模组整合包、愿意手动调整启动器 JVM 参数的玩家参考。

  • 仅适用于 Hotspot 版 Java 8 8u271,其他版本未测试,OpenJ9 兼容性未知
  • 部分启动器自带 G1GC 参数会与本参数冲突导致无法启动,需关闭默认参数添加
  • 在启动器改内存无效时,需在参数最前加 -Xms 与 -Xmx 并改成所需值
  • 使用后有一定概率出现部分游戏模型丢失,过一段时间或切换维度可恢复
  • 推荐搭配 Sampler 手动 GC,并安装 FoamFix 降低内存占用
本卡片由 AI 阅读本帖后生成,可能存在疏漏,请以帖子正文为准。
本帖最后由 猫cAt 于 2022-8-15 00:14 编辑

本篇教程转自mc百科原帖链接,并由作者设定使用CC BY-NC-SA协议
这套参数是我逛了好久中外各种关于JVM参数讨论的帖子总结而成的,参数如下:
-d64 -XX:+AggressiveOpts -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:+CMSConcurrentMTEnabled -XX:ParallelGCThreads=8 -Dsun.rmi.dgc.server.gcInterval=3600000 -XX:+UnlockExperimentalVMOptions -XX:+ExplicitGCInvokesConcurrent -XX:MaxGCPauseMillis=50 -XX:+AlwaysPreTouch -XX:+UseStringDeduplication -Dfml.ignorePatchDiscrepancies=true -Dfml.ignoreInvalidMinecraftCertificates=true -XX:-OmitStackTraceInFastThrow -XX:+OptimizeStringConcat -XX:+UseAdaptiveGCBoundary -XX:NewRatio=3 -Dfml.readTimeout=90 -XX:+UseFastAccessorMethods
注意有些启动器会添加自带的G1GC的优化参数,把这个参数添加过后会导致参数冲突从而无法启动游戏。解决方法:找一找你的启动器有没有关闭添加默认参数的按钮,如果有就关掉。(比如HMCL填参数的地方下方就有“不添加默认的JVM优化参数”的按钮,只有打开了才能启动游戏。)
进行以上步骤后,如果发现在启动器中更改内存没有用,请在参数的最前面加上-Xms10240M -Xmx10240M 两个参数,并将其中的10240M改为你要分配的值。
推荐搭配Sampler使用,可以使用/sampler gc 命令手动GC(内存清理),由于使用了 -XX:+ExplicitGCInvokesConcurrent 参数,这样的显式GC调用也不会卡住你的游戏,同时能释放大量的内存。
另外推荐安装FoamFix以降低内存占用
仅适用于Hotspot版Java 8 8u271,未在其他版本测试,OpenJ9兼容性未知,如果出现问题请将Java更新到8u271版本。
实测1.12的500+模组整合包,这套参数相比使用G1GC的常用优化参数可以极大降低卡顿和跳帧情况,平均帧数提高了10左右。同时内存占用也提高了(分的内存就是要多用),然而似乎在内存即将爆满的情况下也不会明显降低帧率,试了下分配6G内存进游戏,即使内存占用长时间在80%以上还能保持高帧率运行不掉帧。
一个小bug: 使用此参数时有一定概率导致一些游戏模型丢失(比如女仆手办、无线合成终端)之类,过一段时间或者切换维度后会恢复正常。
您需要登录后才可以回帖 登录 | 立即注册
本版积分规则