Performance guide

Forge and NeoForge at half the FPS on NVIDIA: the one-line fix

On Windows with an NVIDIA card, Forge and NeoForge run at about half of Fabric's frame rate when many mobs are on screen. The cause is not the loader's code: the NVIDIA driver has a Minecraft profile that it only applies when it sees net.minecraft.client.main.Main on the Java command line. Fabric puts it there; Forge and NeoForge don't. Add one JVM argument and the driver recognises the game again.

Measured October 4, 2026 in the Modkeel lab. Corrections are welcome on GitHub.

The fix

In your launcher, open the settings of the Forge or NeoForge installation and add this at the end of the JVM arguments, after a space. Keep everything that is already there.

--enable-native-access net.minecraft.client.main.Main

The driver only matches the class name when it stands as a word of its own, with spaces around it. Shorter forms such as -Dnvidia.app=net.minecraft.client.main.Main gave no gain in the lab. This form is two ordinary arguments, so every launcher passes it on unchanged. Java answers with one harmless line in the log: WARNING: Unknown module: net.minecraft.client.main.Main specified to --enable-native-access. It needs Java 17 or newer, which Minecraft 1.18 and later use.

What it changes

What decides the frame rate is whether the driver recognises the game. Each loader is shown as installed and with that one thing flipped: the text added to NeoForge and Forge, removed from Fabric. The "text added" rows use Fabric's own wording of it. The argument above did as well in runs side by side on a quiet machine: Forge 1.20.1 with 300 mobs in view reached 82 and 78 FPS with it, 82 and 79 with Fabric's wording.

LoaderDriver recognises the gameTerrain300 mobs in view300 mobs behind a wall
Minecraft 1.21.1
Fabric, as installedyes30610790
Fabric, text removedno2725143
NeoForge, as installedno2455345
NeoForge, text addedyes3099476
Minecraft 1.20.1
Fabric, as installedyes2258758
Forge, as installedno1534734
Forge, text addedyes2228358

The test works both ways: taking the text away from Fabric drops it to NeoForge's level, and adding it to NeoForge or Forge brings them up to Fabric's. Nothing else changed between runs: same computer, same NVIDIA driver (591.44), same world, no mods besides the loader.

How it was measured: a real client on a laptop with a GeForce GTX 1650 and a Core i7-10750H (an entry-level gaming laptop from 2020), Windows 11, 1280x720, render distance 24, VSync off. Each number is the median second of 20-second scenes over 2 to 4 runs; runs without mods differ by up to 23%, so read the size of the gap, not the exact figure. On a faster computer the frame rates are higher; the gap is largest where the processor, not the graphics card, is the limit, as it is with many mobs. Desktop NVIDIA cards were not measured yet.

Why it happens

NVIDIA drivers carry settings for each known game and pick them by the program's name. Every Minecraft runs as javaw.exe, so the driver's Minecraft profile looks at the command line instead: it lists net.minecraft.client.main.Main, the game's own entry point, and net.minecraft.launchwrapper.Launch, which old Forge (1.12 and earlier) used. With the profile, the driver does the OpenGL work on a thread of its own; without it, the game's render thread waits for every call, and a frame with hundreds of mobs, which needs hundreds of draw calls, takes about twice as long.

Fabric adds -DFabricMcEmu= net.minecraft.client.main.Main to the command line, a property no code reads, so the driver matches. Forge since 1.17 and NeoForge start through their own bootstrap classes, which are not on the driver's list. Users noticed the slowdown when it appeared in Forge 1.17, but without a cause it was put down to outdated drivers. In our tests the driver was current and identical in every run; only the text changed.

Don't just turn on Threaded optimization

The usual advice is to set Threaded optimization to On in the NVIDIA Control Panel. For Java without the argument, that made NeoForge 1.21.1 much slower: 10 to 15 FPS with mobs instead of 53. Copying every setting of the Minecraft profile that the driver lets programs read gave 57 to 65. Only the argument, which makes the driver treat the game as Minecraft, reached 94.

Lab data for every version

The Modkeel lab measures frame rates with and without popular mods on each Minecraft version, and records which mod releases crash.

See the lab data

Questions

Why is Forge or NeoForge slower than Fabric with mobs?

On Windows with an NVIDIA graphics card, the driver has a game profile for Minecraft that it applies only when it finds net.minecraft.client.main.Main on the Java command line. Fabric puts that text there; Forge since 1.17 and NeoForge start the game another way, so the driver does not apply its Minecraft profile. In the Modkeel lab that halved the frame rate with 300 mobs in view.

Should I turn on Threaded optimization in the NVIDIA Control Panel instead?

No. In the Modkeel lab, forcing Threaded optimization on for Java without the argument dropped NeoForge 1.21.1 from 53 to 10-15 FPS with mobs. Copying every readable setting of the driver's Minecraft profile only reached 57-65 FPS. Only the argument, which lets the driver recognise the game, gave the full 94.

Is the argument safe?

Yes. It asks Java to allow native access for a module named net.minecraft.client.main.Main, which does not exist, so Java only prints a warning in the log and changes nothing else. Its effect is that the class name appears on the command line as a word of its own, which is what the driver looks for. Java 17, 21 and 25 all accept it.

Does this affect AMD or Intel graphics?

The profile that matches the command line is NVIDIA's. The Modkeel lab measured it on an NVIDIA card only; on AMD and Intel the argument does nothing that we know of.

Related