-
Notifications
You must be signed in to change notification settings - Fork 0
Post‐Install
This is an addition to the SO wiki, so make sure to read it first.
If you have used OptiFine but not all of its features, you may disable/uninstall the mods you don't use for its features, to benefit from faster loading times and possibly higher performance.
Due to some issues, BlockState Culling is not enabled by default. SIF ships all necessary tweaks to More Culling, so all features will be there when enabling BlockState Culling back again. This can greatly help FPS stability in bamboo jungle or such heavy scenarios.
This optimization is huge for memory usage, but conflicts with mods like Better Block Entities or Enhanced Block Entities. Enable it if you don't use this mods or it doesn't break anything.
Nvidium is a replacement engine for Sodium that hasn't been updated for a long time. There's updated fork that I'm not including yet due to some issues, but you can try it for yourself here.
Ixeris improves FPS stability when moving camera, especially with high mouse polling rate. It also has some side effects: for example, you can freely move your Minecraft window without it freezing. Download
Warning
If you're using official Minecraft launcher with 26.1 and later, you can skip JVM optimization, as it's bundled in args already. The only difference is lack of -XX:+DisableExplicitGC, which you can add manually.
For reference, here's small list which Java version you should use to run various Minecraft versions:
- 1.15 and below: Java 8
- 1.16: Java 8 (for mods), vanilla Java 17+ (including client mods)
- 1.17 and above: Java 17+
- 1.20.5 and above: Java 21+
I recommend sticking with LTS Java, since C2ME has native optimization active only when using newer Java (22+).
There's plenty of Java runtimes, but for Minecraft clients I recommend choosing them from this short list:
If you're using Prism Launcher, you can download them right from a launcher in Java -> Installations.
Paste Base JVM flags to your JVM arguments, if needed make tweaks to them, and then add GC args. You should choose only one GC at a time.
Base JVM flags:
-XX:+AlwaysPreTouch -XX:+UseStringDeduplication -XX:+DisableExplicitGC
Note
Set minimum and maximum memory allocation to the same value in your launcher. If you're using official launcher, you should add memory flags (-Xms4G -Xmx4G for 4G). I recommend allocating from 2G to 6G, 8G is more than enough.
Note
In Java 24 and later, you should also add -XX:+UseCompactObjectHeaders.
ZGC Generational it's a no pause garbage collector, which requires Java 21+. It provides 0 lags when freeing memory. Default with 26.1 in Minecraft Launcher. Best choice in most cases.
ZGC Generational:
-XX:+UseZGC -XX:+ZGenerational
Note
In Java 23 -XX:+ZGenerational option is set by default when using ZGC, so this argument may be removed in this and future versions.
Shenandoah it's a low pause time garbage collector, which performs well on clients. It's available from Java 11, for Java 8 you'll need to use Red Hat OpenJDK.
Note that any Oracle Java builds don't provide Shenandoah.
Shenandoah:
-XX:+UseShenandoahGC -XX:ShenandoahGCHeuristics=adaptive -XX:ShenandoahGCMode=iu
Note
You should replace -XX:ShenandoahGCMode=iu with -XX:ShenandoahGCMode=generational in Java 25+.
If Shenandoah and ZGC Generational are not suitable for your system, you could stick with G1GC defaults.
G1GC:
-XX:+UseG1GC