Getting a stable 4K 60fps on a modded Minecraft install is entirely doable if you understand where the bottlenecks actually are. Most people blame the mods first, but the real problem is usually lighting calculations and render distance pushing your GPU past its limits at that resolution.
The first thing you need to figure out is whether you're dealing with a CPU or GPU bottleneck, because they behave completely differently at 4K. A CPU bottleneck will show up as stuttering when new chunks load, while a GPU bottleneck looks like a flat framerate cap no matter what you tweak. Check your frame times in the debug screen. Consistent spikes every few seconds means CPU. A ceiling that never moves means GPU. There isn't one magic mod that gives you this. It's a combination of performance mods, shader selection, and config tweaking. The foundation starts with Sodium for Fabric or Iris combined with Sodium for rendering optimization, because they rewrite how Minecraft handles chunk uploads and frustum culling. Iris handles shaders separately from the rendering engine, which means you can run a lightweight shader pack without the massive overhead you'd get from OptiFine shaders. For mod loading, Fabric is generally the better choice over Forge for performance-sensitive setups. Modern Fabric loaders with Sodium already deliver significantly higher frame rates than Forge-based performance setups at 4K resolution. The specific performance mods I keep in my mod list are Sodium, Lithium, Phosphor (or the built-in LiLith combo), Entity Culling, and Lazy DFU. Each of these targets a different subsystem, and together they address the major overhead sources without requiring you to remove gameplay mods.
Here's something most people miss: render distance and view bobbing interact in ways that aren't obvious. At 4K, every additional chunk loaded requires four times the pixel processing compared to 1080p, but the CPU work for chunk generation stays roughly the same. This means at high resolutions the GPU becomes dominant much faster than you'd expect. Setting render distance to around 8 to 10 chunks usually lands you in the sweet spot. Pushing it to 12 or more will tank your framerate regardless of how powerful your graphics card is. Shader selection matters enormously. Many popular shader packs like BSL or Sildur's Vibrant are built around aesthetics first and performance second. They look incredible but will drop you well below 60fps at 4K even with decent hardware. I switched to Complementary Unbound specifically because it uses optimized shadow mapping and has better LOD handling for distant terrain. It still delivers strong visual quality while keeping frame times predictable. The difference between a heavy shader and a lighter one at 4K can be anywhere from 40 to 80 frames per second. Memory allocation is another area where people consistently go wrong. You need to allocate enough RAM through the launcher, but allocating too much causes the garbage collector to work harder. For a heavily modded instance at 4K, I typically set JVM arguments to give the game between 8 and 10 gigabytes. Anything beyond that tends to trigger longer GC pauses, which feel exactly like the stuttering I mentioned earlier. The exact number depends on how many mods you run, but the relationship isn't linear.
I ran into a specific issue recently that took me about three hours to track down. I was getting a consistent 55 to 58 fps during normal exploration, but whenever I entered a dense forest biome with a lot of leaves and blocks, the framerate would drop into the 30s. Every optimization I'd applied seemed to have zero effect on this. The problem turned out to be the Entity Culling mod conflicting with a particular lighting engine setting in Iris. The mod was preventing entities from rendering, but the shader was still processing their lighting calculations through the wrong code path. The fix was updating Entity Culling to the latest build and enabling the "skip entity shader" option in the mod's config file. After that, the drops disappeared completely and I was sitting at a stable 61 to 63 fps across all biomes. Graphics settings inside Minecraft itself also need adjustment. Set graphics to Fancy, not Fast. Counterintuitively, Fancy rendering is actually more efficient on modern GPUs because it processes blocks in larger batches rather than firing individual draw calls for every simple block. Cloud rendering should be disabled. Smooth lighting makes everything look better with minimal performance cost, so keep it on. Particles should be set to Minimal or Decreased if you're chasing stability, because particle effects generate a surprising amount of draw calls at 4K resolution. Your display settings in the launcher matter too. If your monitor supports variable refresh rate, enable G-Sync or FreeSync in your GPU control panel before launching the game. Running a variable refresh rate display with a fixed game framerate creates micro-stutters that no amount of modding will fix. Getting your game framerate to match or slightly exceed your monitor's refresh rate eliminates this entirely.
Get the Full Details

Video drivers are something people overlook constantly. NVIDIA's Game Ready drivers are generally better for gaming than the Studio drivers, and AMD's Adrenalin software has a specific profile you should set for Java games because it changes how the driver handles multithreaded applications. Both companies have made improvements to their Java-specific optimizations over the past couple of years that are worth checking if you haven't updated in a while. Let's be clear about what won't work. You cannot achieve a stable 4K 60fps with 200 plus mods, heavy shader packs, and render distance above 12 chunks on consumer hardware. No amount of tweaking will solve that. The limiting factor becomes the sheer number of assets the GPU has to process simultaneously. If you're running a large modpack like All the Mods or Valhelsia, you should plan on lowering your render distance to 6 to 8 chunks or dropping to a lighter shader to stay competitive. The target is realistic, but it requires making actual tradeoffs rather than expecting a configuration that does everything. If you want to share this kind of setup with other people, most performance-focused creators host their mod lists and configurations on CurseForge or Modrinth. You can either download a pre-built performance-oriented modpack or take the individual mod downloads and construct your own instance using the CurseForge app or Prism Launcher. Prism Launcher is particularly useful because it handles JVM arguments automatically and lets you separate your performance mods from your gameplay mods into different profiles.
The biggest single change you can make is switching from Forge to Fabric with Sodium. The performance gain from that alone typically adds between 40 and 100 percent more frames compared to a standard Forge setup at the same resolution and mod count. From there, shader selection, render distance management, and memory allocation are the remaining variables you adjust based on your specific hardware configuration.