Discord
Rozdział 3 z 4

Argumenty JVM dla Minecraft

Argumenty JVM dla Minecraft

-Xmx, -Xms, G1GC, ZGC, flagi Aikara - jak skonfigurować Jave, żeby Minecraft działał plynniej.

Minecraft działa na Java Virtual Machine (JVM), która zarządza pamięcią i wykonywaniem kodu. Domyślne ustawienia JVM nie są zoptymalizowane pod grę - Minecraft dostaje 2 GB RAM, używa starego garbage collectora i nie korzysta z wielu optymalizacji dostępnych w nowoczesnych wersjach Javy. Zmiana kilku argumentów startowych (flag JVM) może wyeliminować lag spike'y, poprawić płynność i pozwolić grze wykorzystać więcej dostępnej pamieci. Ten poradnik wyjaśnia każdy ważny argument i podaje gotowe konfiguracje do skopiowania.

Czym są argumenty JVM

Argumenty JVM to parametry przekazywane do maszyny wirtualnej Javy przy uruchamianiu programu. Kontrolują alokacje pamięci, wybór garbage collectora, kompilacje JIT i dziesiątki innych parametrow. W kontekście Minecraft najważniejsze są trzy grupy: alokacja RAM (-Xmx, -Xms), garbage collector (G1GC, ZGC, Shenandoah) i dodatkowe flagi optymalizacyjne.

Argumenty JVM ustawiasz w launcherze Minecraft. W oficjalnym launcherze: Installations > Edit > More Options > JVM Arguments. W launcherach typu MultiMC, Prism Launcher, ATLauncher i CurseForge: ustawienia instancji > Java > JVM Arguments (lub analogiczne pole).

-Xmx i -Xms - alokacja pamięci RAM

-Xmx ustawia maksymalna ilość RAM, która JVM może użyć. -Xms ustawia początkowa alokacje. Domyślnie Minecraft ma -Xmx2G (2 GB). To często za mało - szczególnie z modami, większym render distance lub na serwerach.

Rekomendowane wartości:

Scenariusz-Xmx (max RAM)RAM systemu
Vanilla bez modów3-4 GB8 GB+
Sodium + kilka modów4-6 GB8 GB+
Modpack (50+ modów)6-8 GB16 GB+
Ciężki modpack (200+ modów)8-12 GB16-32 GB
Serwer (10-20 graczy)6-8 GB16 GB+

Ważna zasada: -Xms powinno być równe -Xmx. Czyli jeśli ustawiasz -Xmx4G, ustaw też -Xms4G. Dlaczego? Bo JVM nie musi dynamicznie powiększać heapu w trakcie gry, co eliminuje lag spike'y związane z realokacja pamieci. Flagi Aikara stosują te zasade.

Uwaga: Nie przydzielaj więcej RAM niż potrzebujesz! Więcej RAM = więcej śmieci do sprzatniecia przez garbage collector = dłuższe pauzy GC. 4 GB vanilla, 6-8 GB z modami to bezpieczne wartości. 16 GB dla Minecrafta bez ciężkiego modpacka to przepis na lag spike'y.

Garbage Collector - G1GC, ZGC, Shenandoah

Garbage collector (GC) to mechanizm Javy odpowiedzialny za zwalnianie nieuzywanych obiektów z pamieci. Minecraft tworzy miliony krótko zyjacych obiektów (chunki, encje, bufory renderingu), które GC musi regularnie sprzatac. Gdy GC pracuje, gra może się "zacinac" - to są lag spike'y GC.

G1GC (Garbage-First Garbage Collector)

Domyślny GC w Java 9+. Dzieli heap na regiony i sprzata najpierw te z największa ilością smieci. Dobrze zbalansowany między przepustowością a dlugoscia pauz. Flagi Aikara optymalizują G1GC specjalnie pod Minecraft.

ZGC (Z Garbage Collector)

Nowoczesny GC dostępny od Javy 15 (stabilny od 17). Gwarantuje pauzy poniżej 1 ms niezależnie od rozmiaru heapu. To oznacza: zero lag spike'ow od GC. Wada: zużywa więcej CPU niż G1GC i wymaga 10-15% więcej RAM. Na maszynach z 16+ GB RAM i 4+ rdzeniami CPU jest znakomitym wyborem.

Shenandoah GC

Podobny do ZGC - ultra-niskie pauzy. Dostępny w OpenJDK (nie w Oracle JDK). Nieco mniejsze zużycie CPU niż ZGC, ale też mniej "sprawdzony" z Minecraft. Dobra alternatywa, jeśli używasz OpenJDK i chcesz minimalne pauzy.

Flagi Aikara - złoty standard

Aikar (Aikar's Flags) to zestaw argumentów JVM stworzony przez Daniel'a Ennis'a (Aikar), dewelopera Paper MC (serwer Minecraft). Te flagi optymalizują G1GC specjalnie pod sposób, w jaki Minecraft używa pamieci: dużo krótko zyjacych obiektów, częste alokacje dużych regionów (chunki) i potrzeba niskich pauz.

Pełny zestaw flag Aikara (dla 4 GB RAM):

-Xms4G -Xmx4G -XX:+UseG1GC -XX:+ParallelRefProcEnabled -XX:MaxGCPauseMillis=200 -XX:+UnlockExperimentalVMOptions -XX:+DisableExplicitGC -XX:+AlwaysPreTouch -XX:G1NewSizePercent=30 -XX:G1MaxNewSizePercent=40 -XX:G1HeapRegionSize=8M -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

Zmień -Xms4G -Xmx4G na odpowiednia wartość dla Twojego scenariusza (np. -Xms6G -Xmx6G dla modpacka). Reszta flag zostaje bez zmian.

Co robią poszczególne flagi:

  • +UseG1GC - wybiera G1 Garbage Collector
  • MaxGCPauseMillis=200 - cel: pauzy GC poniżej 200 ms
  • +AlwaysPreTouch - alokuje cała pamięć od razu, zamiast na zadanie. Eliminuje lag spike'y przy rozszerzaniu heapu
  • G1NewSizePercent=30, G1MaxNewSizePercent=40 - 30-40% heapu na obiekty krótko żyjące (chunki, bufory). Minecraft tworzy ich dużo
  • G1HeapRegionSize=8M - rozmiar regionów G1. 8 MB jest optymalne dla Minecraft
  • InitiatingHeapOccupancyPercent=15 - GC zaczyna sprzatac wcześnie (przy 15% zapełnienia), zamiast czekać az heap się zapełni
  • MaxTenuringThreshold=1 - obiekty szybko przechodzą do old gen, bo w Minecraft mało obiektów żyje dłużej niż kilka sekund
  • SurvivorRatio=32 - mały survivor space, bo obiekty albo umierają szybko, albo żyją długo

Alternatywne flagi z ZGC (Java 21+)

Jeśli używasz Javy 21 lub nowszej i masz 16+ GB RAM w systemie, ZGC może dać lepsze rezultaty niż G1GC z flagami Aikara:

-Xms4G -Xmx4G -XX:+UseZGC -XX:+ZGenerational -XX:+AlwaysPreTouch -XX:+DisableExplicitGC -XX:+PerfDisableSharedMem

-XX:+ZGenerational (od Java 21) włącza generacyjny ZGC, który jest jeszcze wydajniejszy od klasycznego ZGC. Generacyjny ZGC traktuje krótko żyjące obiekty inaczej niż długo żyjące, co idealnie pasuje do Minecraft.

ZGC jest prostszy w konfiguracji - nie wymaga dziesiątek flag jak G1GC, bo sam automatycznie dostosowuje parametry. Wada: zużywa więcej RAM (~15%) i CPU. Jeśli masz 8 GB RAM w systemie i przydzielasz 4 GB Minecraft, ZGC może być zbyt "groźny" - zostaw G1GC z Aikar.

Jak ustawić flagi w popularnych launcherach

Oficjalny launcher Minecraft

  1. Otwórz launcher, przejdź do zakładki "Installations"
  2. Kliknij "..." przy swoim profilu, wybierz "Edit"
  3. Kliknij "More Options"
  4. W polu "JVM Arguments" usuń domyślny tekst i wklej flagi Aikara
  5. Kliknij "Save"

Prism Launcher / MultiMC

  1. Kliknij prawym przyciskiem na instancje > "Edit Instance"
  2. Przejdź do zakładki "Settings" > "Java"
  3. Zaznacz "Override" przy "JVM Arguments"
  4. Wklej flagi Aikara (bez -Xmx i -Xms - te ustawiasz w osobnych polach "Minimum memory" i "Maximum memory")
  5. Ustaw odpowiedni RAM w polach memory allocation

CurseForge / ATLauncher

  1. Przejdź do ustawień (ikona zębatki)
  2. Znajdź sekcje "Java" lub "Minecraft"
  3. Ustaw RAM w polu "Allocated Memory"
  4. Wklej dodatkowe flagi w polu "Additional Arguments" lub "JVM Arguments"

Jaka wersje Javy wybrać

Minecraft 1.20.5+ wymaga Javy 21. Starsze wersje działają na Java 17 lub nawet 8. Niezależnie od wymogu, używaj najnowszej kompatybilnej wersji Javy:

  • Minecraft 1.20.5+: Java 21 (GraalVM CE 21 lub Adoptium 21)
  • Minecraft 1.17-1.20.4: Java 17 (ale 21 też działa)
  • Minecraft 1.16 i starsze: Java 8 (niektóre modpacki wymagają dokładnie 8)

GraalVM Community Edition to wariant Javy od Oracle z lepszym kompilatorem JIT. Daje 5-15% lepsze FPS niż standardowy OpenJDK dzięki agresywniejszej optymalizacji kodu w runtime. Jest darmowy i prosty w instalacji (pobierz z graalvm.org, rozpakuj, wskaż launcherowi ścieżkę do java.exe).

Weryfikacja - czy flagi działają

Po ustawieniu flag uruchom Minecraft i naciśnij F3. W lewym górnym rogu zobaczysz informacje o JVM: wersje Javy, ilość przydzielonego RAM-u i aktualny garbage collector. Upewnij się, ze:

  • Wersja Javy jest taka, jaka ustawiłeś (np. "Java 21.0.2")
  • Przydzielony RAM odpowiada -Xmx (np. "Mem: 45% 1812/4096MB" oznacza 4 GB max)
  • Nie ma częstych lag spike'ow (spadków FPS co kilka sekund) - jeśli są, garbage collector może być źle skonfigurowany lub masz za dużo RAM-u

Jeśli po zastosowaniu flag nadal masz problemy z wydajnością, sprawdź nasze porady w 20 sposobach na więcej FPS i poradniku ustawień graficznych. Flagi JVM to ważny element ukladanki, ale nie jedyny - mod optymalizacyjny i odpowiednie ustawienia graficzne dają razem znacznie więcej niż same argumenty Javy.

Wskazówka: Jeśli prowadzisz serwer Minecraft (Paper, Purpur, Fabric), flagi Aikara są jeszcze ważniejsze niż w kliencie. Serwer zarządza wieloma graczami, chunkami i encjami jednocześnie, więc optymalizacja GC drastycznie poprawia TPS (ticks per second). Na serwerze z 20 graczami różnica między domyślnymi flagami a Aikar może oznaczać 15 vs 20 TPS.

Komentarze