❤️ recent supporters
donate →
SCALEBOUND
modded minecraft smp
// performance guide

Why am I lagging?

Lag in a modpack like this can come from a bunch of different places, and it's not always your PC's fault. Here's a rundown of the most common causes, roughly in order of "most likely to be your problem" — start at the top.

01Your game might be using the wrong GPU 02You don't have enough RAM allocated 03Add the universal JVM performance flags 04Render distance & graphics settings too high 05Shaders and resource packs 06Background apps eating your resources 07Your drive is slow 08Outdated drivers 09It's not you, it's the server 10Quick checklist
⚡ most common cause

Your game might be using the wrong GPU

If you have a laptop or desktop with a dedicated graphics card (an NVIDIA GeForce/RTX/GTX or an AMD Radeon RX card) and integrated graphics built into your processor (Intel UHD, AMD Radeon Graphics), Windows sometimes picks the wrong one for Minecraft without telling you. It'll quietly run the game on your weak built-in graphics chip instead of your actual graphics card, and you'll get bad frame rates even though your PC is way more powerful than that.

🔍
How to check: open Task Manager, go to the Performance tab, and look at the usage graphs while you're actually playing (not just sitting on the main menu). If your integrated graphics is sitting high and your dedicated GPU is barely moving, that's exactly what's happening.
Intel UHD Graphics (integrated)
78% usage — doing all the work
NVIDIA RTX (dedicated)
6% usage — sitting idle

⏺ simulated live readout — this is what a broken setup looks like in Task Manager

That's the broken setup above — your good GPU sitting there doing nothing while your PC tries to run a heavily modded game on the weakest chip in it. This is genuinely one of the most common causes of "why is my game running like garbage when my PC should be able to handle this," and most people never think to check it because nothing tells you it's happening — the game just runs badly and you assume your PC isn't good enough.

If you're on a laptop, some usage on the integrated graphics is normal and expected even after fixing this (the screen itself is wired through it) — what matters is whether your dedicated GPU is actually doing the heavy lifting once you're in a loaded world.

Download the fix toolforce-dedicated-gpu.bat · free, runs locally Drop it in your modpack instance folder (next to mods, saves, config) and run it. It detects your launcher and dedicated GPU automatically, then sets the registry preference for you.
Prefer to do it by hand, or the tool didn't catch your launcher? manual step-by-step guide
STEP 0Check you actually have a dedicated GPU
  1. Right click the Start button → Device Manager
  2. Expand "Display adapters"
  3. If you only see one entry like "Intel UHD Graphics" or "AMD Radeon Graphics," you don't have a dedicated GPU — none of this applies to you, your PC is doing the best it can already.
  4. If you see two entries (one Intel/AMD integrated, one NVIDIA GeForce/RTX/GTX or AMD Radeon RX), you've got a dedicated GPU and the rest of this guide is for you.
FIND ITWhere to find javaw.exe for your launcher

If none of the below match what you've got, search your whole drive for "javaw.exe" in File Explorer and use whichever one is newest / matches your launcher's folder.

CurseForgeInstall folder → Install\java\ → one or two folders, javaw.exe is in bin\ inside each.
Modrinth App%appdata%\com.modrinth.theseus\java_versions — look in the bin\ folder of whatever's in there.
Prism LauncherPrism Launcher folder → java\ → javaw.exe is in bin\ inside that.
ATLauncherATLauncher folder → runtimes\ → javaw.exe is in bin\ inside whichever version folder is there.
TLauncherUsually uses whatever Java is installed on your PC — check C:\Program Files\Java\ or (x86)\Java\.
STEP 1Windows Graphics Settings
  1. Open Settings → System → Display → Graphics (or search "Graphics settings" in the start menu)
  2. Click "Browse" and add: javaw.exe (from above) and your launcher's main exe (CurseForge.exe, PrismLauncher.exe, ModrinthApp.exe, ATLauncher.exe, TLauncher.exe, minecraft.exe — whatever you use)
  3. Click each one once added, hit Options, and set it to "High performance"
STEP 2NVIDIA Control Panel (skip if you have AMD)

This is the important one — Windows Graphics Settings alone doesn't always get respected, especially on laptops.

  1. Right click the desktop → NVIDIA Control Panel (if missing, your drivers are probably outdated — see Step 5 below)
  2. Manage 3D Settings → Program Settings tab
  3. Click "Add" and browse to the same exes from Step 1 (javaw.exe and your launcher exe)
  4. For each one, set "Preferred graphics processor for this program" to "High-performance NVIDIA processor"
  5. Apply
Also check the Global Settings tab — if "Preferred graphics processor" is set to "Integrated graphics" globally, that can override your per-program settings on some driver versions. Set it to "Auto-select" or "High-performance NVIDIA processor" instead.
STEP 3AMD users
  1. Open AMD Software (Adrenalin)
  2. Go to the Gaming tab
  3. Add the game/exe manually if it's not listed
  4. Set Graphics Profile to "High Performance"
  5. There's also a "Switchable Graphics" section under System → Display or in laptop-specific settings, depending on your version — check there too if Gaming tab doesn't have it.
STEP 4Laptops specifically

There's usually no physical switch between the two GPUs (Optimus on Nvidia laptops, AMD Smart Shift/Switchable Graphics on AMD). The integrated GPU is always connected to the screen, so you'll always see some usage on it even when the game renders on the dedicated card — that part is normal. What's not normal is the dedicated GPU sitting near 0% the whole time you're in a loaded world.

Some laptops (MSI, Asus, Lenovo, etc) also have their own control center app (MSI Center, Armoury Crate, Lenovo Vantage) with a hybrid graphics / GPU mode setting buried in there — look for "Hybrid," "Optimus," "Discrete GPU only," or "MUX Switch."

Plugged into a wall outlet? Also check Windows power mode. Battery saver and some "Best power efficiency" settings force games onto the integrated GPU no matter what you set above.
STEP 5Update your GPU drivers

Outdated or half-broken drivers can ignore every setting above. Grab the latest driver straight from the source rather than trusting Windows Update: NVIDIA — nvidia.com/drivers (or GeForce Experience / the NVIDIA app) · AMD — amd.com/support

Still having issues? A clean reinstall with DDU (Display Driver Uninstaller) run in Safe Mode, followed by a fresh driver install, fixes a surprising number of "my dedicated GPU won't kick in" problems caused by leftover driver conflicts.

STEP 6Confirm it worked

Open Task Manager → Performance tab, click your dedicated GPU, and watch the usage while actually walking around in a loaded world (not just the loading screen). It should be doing the heavy lifting now, not your integrated graphics. You can also press F3 in game and check the bottom right corner — some versions show which GPU is rendering, though Task Manager is more reliable.

Restart your launcher completely after making any of these changes — half the time it doesn't take effect until you fully close and reopen it. A full PC restart fixes it if closing the launcher alone doesn't.

Still not working?
  • Double check you actually edited the right javaw.exe — modpacks can have more than one Java install on the same PC and it's easy to set the wrong one.
  • Try setting both the Windows Graphics setting and the NVIDIA/AMD control panel setting at the same time — don't rely on just one.
  • Some prebuilt desktops have the monitor cable plugged into the motherboard instead of the dedicated GPU, which forces everything through integrated graphics no matter what software you set. Check which port your monitor cable is in and move it to the GPU's port if needed.
🧠02 · cause

You don't have enough RAM allocated

Modpacks need more RAM than vanilla Minecraft, sometimes a lot more depending on how many mods are loaded. If your launcher is only giving the game 3-4GB, you'll get stuttering, freezing, and crashes once you've been playing a while, especially after generating a lot of world or fighting a bunch of mobs at once.

Check your launcher's instance settings for a memory/RAM allocation slider and make sure it's set high enough for this modpack (check the modpack page or ask in the Discord for the recommended amount). Don't go overboard either — allocating way more than you need can actually make things worse because of how Java's garbage collector behaves with huge heaps. That's exactly what the flags below are for.

⚡ universal fix, takes 2 minutes

Add these JVM performance flags

On top of fixing the GPU mismatch and giving the game enough RAM, you can directly tune how Java manages that memory. Minecraft (and every mod loaded with it) runs inside the Java Virtual Machine, and the JVM periodically pauses the entire game to clean up unused memory — this is called garbage collection (GC). On a lightly modded game you never notice it. On a 335-mod pack, the default garbage collector can freeze the game for a noticeable chunk of a second at a time, which feels like random stutters, freezes, or rubber-banding that have nothing to do with your GPU or render distance.

These flags switch Java over to G1GC (a garbage collector built for low, predictable pause times) and tune it specifically for Minecraft's memory pattern, plus raise two mod-loader network timeouts so a big modpack doesn't get disconnected while it's still loading data on login. They're the same flags used by Aikar's and most modern modpack-performance guides — safe, well-tested, and used on millions of modded instances.

💡
Why use them: smoother, more consistent frame times with far fewer GC-related freezes and stutters — especially noticeable during world generation, big fights, or redstone/Create contraptions running. They don't add FPS by themselves, they remove the random hitches that make a game with good FPS still feel laggy.
JVM ARGUMENTS
-XX:+UseG1GC -XX:+ParallelRefProcEnabled -XX:MaxGCPauseMillis=200 -XX:+UnlockExperimentalVMOptions -XX:+DisableExplicitGC -XX:G1NewSizePercent=30 -XX:G1MaxNewSizePercent=40 -XX:G1HeapRegionSize=16M -XX:G1ReservePercent=20 -XX:G1HeapWastePercent=5 -XX:G1MixedGCCountTarget=4 -XX:InitiatingHeapOccupancyPercent=15 -XX:G1MixedGCLiveThresholdPercent=90 -XX:G1RSetUpdatingPauseTimePercent=5 -XX:SurvivorRatio=32 -XX:+PerfDisableSharedMem -XX:MaxTenuringThreshold=1 -Dfml.readTimeout=90 -Dfml.loginTimeout=90
What do these actually do? flag-by-flag breakdown
CORESwitching the garbage collector to G1GC
  • -XX:+UseG1GC — turns on G1 ("Garbage First"), a collector designed to clean memory in small, regional chunks instead of pausing everything at once.
  • -XX:+ParallelRefProcEnabled — lets G1 process references (the bookkeeping behind weak/soft references mods use a lot of) across multiple CPU threads instead of one, shortening pauses.
  • -XX:MaxGCPauseMillis=200 — tells G1 to aim for pauses no longer than 200ms. It's a target, not a hard guarantee, but it steers G1's internal tuning toward short, frequent pauses instead of rare, long freezes.
  • -XX:+UnlockExperimentalVMOptions — required flag that unlocks the experimental G1 tuning options used below (G1NewSizePercent, G1MixedGCCountTarget, etc).
  • -XX:+DisableExplicitGC — ignores System.gc() calls some mods make manually. Manual GC calls force a full, expensive collection at a random time — this stops mods from triggering one over your head.
REGIONSTuning heap regions for Minecraft's memory pattern

G1 splits memory into regions and these flags shape how it sizes and recycles them. Minecraft allocates and discards huge numbers of short-lived objects every tick (block updates, entity ticks, packets) — these settings keep the "young generation" big enough to absorb that churn without constantly triggering collections.

  • -XX:G1NewSizePercent=30 / -XX:G1MaxNewSizePercent=40 — keeps 30-40% of the heap reserved as "young generation" space for those short-lived objects, instead of G1's much smaller default.
  • -XX:G1HeapRegionSize=16M — sets a larger region size, better suited to a heap in the multi-GB range than G1's auto-picked default.
  • -XX:G1ReservePercent=20 — keeps 20% of the heap held back as a safety buffer so G1 doesn't have to fall back to a slow full GC if it runs low on space.
  • -XX:G1HeapWastePercent=5 / -XX:G1MixedGCCountTarget=4 / -XX:G1MixedGCLiveThresholdPercent=90 — control how aggressively G1 reclaims mostly-empty regions during "mixed" collections, spreading the work over more, smaller collections instead of one big one.
  • -XX:InitiatingHeapOccupancyPercent=15 — starts a collection cycle earlier (at 15% heap usage instead of the default 45%), trading slightly more frequent small collections for avoiding sudden large ones.
  • -XX:G1RSetUpdatingPauseTimePercent=5 — caps how much of each pause is spent on remembered-set bookkeeping, leaving more of the pause budget for actually freeing memory.
MISCSmaller memory-behavior tweaks
  • -XX:SurvivorRatio=32 — shrinks the survivor space ratio, which suits Minecraft's mix of mostly very short-lived objects with a smaller set that sticks around.
  • -XX:+PerfDisableSharedMem — stops the JVM writing performance-monitoring data to disk continuously, which removes a small but constant source of disk I/O (helps more on slower drives — see cause #7).
  • -XX:MaxTenuringThreshold=1 — promotes surviving objects to old generation faster instead of copying them between survivor spaces repeatedly, which is cheaper for Minecraft's allocation pattern.
NETWORKMod loader timeouts
  • -Dfml.readTimeout=90 / -Dfml.loginTimeout=90 — Forge/NeoForge (FML) properties that raise how long the client waits while exchanging mod/registry data with the server during login, from the short default to 90 seconds. A pack this size can take a while to sync on first join or after an update — without this, slower connections or PCs can get kicked with a "timed out" disconnect before they even finish loading in.
These are JVM arguments, separate from your -Xmx/-Xms memory allocation flags — add them alongside your existing memory settings, don't replace them.
How to add JVM arguments in your launcher per-launcher instructions

Copy the flags above with the button, then paste them into the JVM/Java Arguments field for this instance — append them after anything already there (like your -Xmx memory setting), don't delete what's already in the box.

CurseForgeOpen the modpack → the gear/settings icon next to "Play" → Java Settings → paste into "Additional Java Arguments."
Modrinth AppClick the instance → the three dots / settings → Java → "Java Arguments" field.
Prism LauncherRight click the instance → Edit Instance → Settings → tick "Java arguments" under Java → paste in the box.
ATLauncherClick the instance → Settings (or the wrench icon) → Java/Minecraft tab → "Java Parameters" field.
TLauncherSettings (gear icon) → Java settings tab → "JVM Arguments" field.
After saving, fully close and reopen your launcher before the new arguments take effect — same as the GPU fix above.
🌄04 · cause

Render distance & graphics settings too high

Modded Minecraft has to generate, light, and render a lot more per chunk than vanilla does. A render distance that felt fine in vanilla can bring a heavily modded game to its knees.

Try dropping render distance down (8-10 chunks is a reasonable starting point for a modpack) and see how much that helps before touching anything else. Simulation distance does the same thing for game logic/mob behavior — lower that too if things feel laggy specifically when lots of entities are around.

05 · cause

Shaders and resource packs

Shaders look great and tank performance, especially on modded Minecraft which is already pushing your PC harder than vanilla. If you're running a shader pack, try turning it off entirely to see how much of your lag goes away — that'll tell you if it's actually the problem.

High resolution resource packs (anything above the modpack's default texture size) can do the same thing, especially with a lot of VRAM-hungry mods already loaded.

🖥️06 · cause

Background apps eating your resources

Discord screen share/overlay, OBS, browsers with a bunch of tabs open, RGB lighting software, antivirus doing a scan, and game capture overlays can all eat CPU, RAM, or GPU in the background while you play. Close anything you don't need open.

Discord's overlay specifically is known to cause stutter in some modded setups — worth disabling under Discord Settings → Activity Overlay if you're having issues.

💾07 · cause

Your drive is slow

If the modpack is installed on a traditional spinning hard drive instead of an SSD, you'll get noticeable stutter whenever new chunks are loading or saving, since modded worlds read/write a lot more data than vanilla.

Moving your instance to an SSD (even a cheap one) makes a bigger difference than most people expect.

🔧08 · cause

Outdated drivers

Old GPU drivers can cause stutter, crashes, or your dedicated GPU not being used properly at all (see cause #1 above). Update straight from NVIDIA or AMD's website rather than just relying on Windows Update to keep them current.

📡09 · cause

It's not you, it's the server

Sometimes lag isn't your PC at all. If everyone online is lagging at the same time, or you're rubber-banding/teleporting around but your own FPS counter looks fine, that's server-side lag, not client-side. That can be caused by too many entities/redstone/chunks loaded on the server, the server itself being under-resourced, or just internet issues. There's nothing you personally can fix on your end for that one besides letting whoever runs the server know what you're seeing — drop a message in the Discord.

Quick checklist

most impactful first
  1. Check Task Manager for the GPU mismatch issue described above
  2. Make sure RAM allocation matches what the modpack recommends
  3. Add the universal JVM performance flags to your launcher's Java arguments
  4. Lower render distance and simulation distance
  5. Turn off shaders/heavy resource packs temporarily to test
  6. Close background apps, especially Discord overlay
  7. Update your GPU drivers
  8. If it's only happening with other people online too, it's probably the server, not you

Did this help?

players said this helped