How to Boost Project Zomboid FPS with GraalVM (Build 41)

Swapping Project Zomboid's bundled Java 17 runtime for GraalVM JDK 17 gives you noticeably better FPS, especially in zombie-heavy areas. This guide covers Build 41 (the current stable branch).

Why GraalVM Makes PZ Run Faster

Project Zomboid runs entirely on the Java Virtual Machine (JVM). When Java code runs, a component called the JIT (Just-In-Time) compiler watches which parts of the code execute most often and compiles those hot paths into native machine code for your CPU. The quality of that compiled code determines how fast the game runs.

Build 41 ships with OpenJDK 17, which uses the C2 JIT compiler. GraalVM JDK 17 is a drop-in replacement that uses the Graal compiler instead. Graal is written in Java itself, which allows it to apply more sophisticated optimizations than C2. For a simulation-heavy game like PZ, where the same zombie AI routines and pathfinding code run thousands of times per second, better JIT output translates directly to higher and more stable FPS.

This guide is specifically for Build 41 (stable). The process swaps the jre64 folder that PZ uses exclusively - your system Java is never touched.

What to Expect

Results vary by system. Common reports from players who have done this swap:

  • Higher average FPS in areas with large zombie populations
  • Reduced frame time spikes during heavy simulation ticks
  • Slightly faster world load times as the JIT warms up quicker

If your machine is already GPU-bound (GPU at 99% usage, CPU idle), the gains will be smaller. On CPU-bound systems and lower-end hardware, the difference is more pronounced.

Platform Notes

  • Windows: Use the Windows x64 zip archive
  • Linux: Use the Linux x64 tar.gz archive; same folder layout applies
  • Steam Deck: Use Linux ARM; access game files via Desktop Mode
  • macOS: GraalVM on Apple Silicon runs through Rosetta 2 emulation, which adds overhead. Benchmark carefully before committing to the swap on Mac.

If you run Steam Verify Game Files, it will detect the replaced jre64 and restore the original. Keep the GraalVM archive saved somewhere so you can redo the swap quickly after a verify.

01

Download GraalVM JDK 17

Go to graalvm.org/downloads and select GraalVM JDK 17 (not 21, not 25 - B41 uses Java 17). Download the archive for your platform, not the installer:

  • Windows: zip file
  • Linux: tar.gz file
  • Steam Deck: Linux ARM tar.gz

The installer writes to your system Java. The archive is a self-contained folder you extract directly into the game directory without affecting anything else on your machine.

02

Find Your PZ Game Folder

Open Steam, right-click Project Zomboid, go to Manage, then Browse Local Files. Inside you will see a folder called jre64 - this is the Java runtime PZ uses exclusively. It has nothing to do with any Java installed elsewhere on your system.

03

Replace the JRE

  1. Rename jre64 to jre64_old - this is your backup, do not delete it yet
  2. Create a new empty folder named jre64
  3. Extract the GraalVM archive contents into this new folder

After extraction, verify the path jre64/bin/java.exe exists (Windows) or jre64/bin/java (Linux). If the archive extracted into a nested subfolder, move its contents up one level so bin, lib, and conf sit directly inside jre64.

04

Optional: Enable Advanced Flags

Open ProjectZomboid64.json in the game folder with a text editor. Find the vmArgs array and add these two entries:

  • -Djdk.graal.CompilerConfiguration=enterprise - uses the most aggressive optimization tier
  • -Djdk.graal.VectorizeSIMD=true - enables SIMD vectorization for math-heavy loops; requires AVX2 support (most CPUs from 2013 onward)

These flags are optional. If the game fails to start after adding them, remove them and retest.

05

Test and Revert if Needed

Launch through Steam as normal. Press F11 in-game to show the performance overlay. Load into a zombie-heavy area and compare FPS and frame time to your baseline before the swap.

To revert: delete the jre64 folder you created and rename jre64_old back to jre64. The game returns to its exact original state.