Discord
Rozdział 3 z 4

Argumenty JVM dla Minecraft

-Xmx, -Xms, G1GC, ZGC, flagi Aikara -- jak skonfigurować Jave, zeby Minecraft dzialal plynniej.

Minecraft działa na Java Virtual Machine (JVM), która zarzadza pamiecia i wykonywaniem kodu. Domyslne ustawienia JVM nie są zoptymalizowane pod gre -- Minecraft dostaje 2 GB RAM, używa starego garbage collectora i nie korzysta z wielu optymalizacji dostępnych w nowoczesnych wersjach Javy. Zmiana kilku argumentow startowych (flag JVM) może wyeliminowac lag spike'y, poprawic płynność i pozwolic grze wykorzystać więcej dostepnej pamieci. Ten poradnik wyjasnia 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. Kontroluja alokacje pamieci, wybor garbage collectora, kompilacje JIT i dziesiatki innych parametrow. W kontekscie 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 pamieci RAM

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

Rekomendowane wartości:

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

Ważna zasada: -Xms powinno byc równe -Xmx. Czyli jeśli ustawiasz -Xmx4G, ustaw też -Xms4G. Dlaczego? Bo JVM nie musi dynamicznie powiekszac heapu w trakcie gry, co eliminuje lag spike'y zwiazane z realokacja pamieci. Flagi Aikara stosuja te zasade.

Uwaga: Nie przydzielaj więcej RAM niz potrzebujesz! Więcej RAM = więcej smieci do sprzatniecia przez garbage collector = dluzsze pauzy GC. 4 GB vanilla, 6-8 GB z modami to bezpieczne wartości. 16 GB dla Minecrafta bez ciezkiego modpacka to przepis na lag spike'y.

Garbage Collector -- G1GC, ZGC, Shenandoah

Garbage collector (GC) to mechanizm Javy odpowiedzialny za zwalnianie nieuzywanych obiektow z pamieci. Minecraft tworzy miliony krótko zyjacych obiektow (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)

Domyslny GC w Java 9+. Dzieli heap na regiony i sprzata najpierw te z największa iloscia smieci. Dobrze zbalansowany między przepustowoscia a dlugoscia pauz. Flagi Aikara optymalizuja G1GC specjalnie pod Minecraft.

ZGC (Z Garbage Collector)

Nowoczesny GC dostępny od Javy 15 (stabilny od 17). Gwarantuje pauzy poniżej 1 ms niezaleznie od rozmiaru heapu. To oznacza: zero lag spike'ow od GC. Wada: zuzywa więcej CPU niz 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 niz ZGC, ale też mniej "sprawdzony" z Minecraft. Dobra alternatywa, jeśli uzywasz OpenJDK i chcesz minimalne pauzy.

Flagi Aikara -- złoty standard

Aikar (Aikar's Flags) to zestaw argumentow JVM stworzony przez Daniel'a Ennis'a (Aikar), dewelopera Paper MC (serwer Minecraft). Te flagi optymalizuja G1GC specjalnie pod sposob, w jaki Minecraft używa pamieci: dużo krótko zyjacych obiektow, czeste alokacje dużych regionow (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

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

Co robia poszczegolne flagi:

  • +UseG1GC -- wybiera G1 Garbage Collector
  • MaxGCPauseMillis=200 -- cel: pauzy GC poniżej 200 ms
  • +AlwaysPreTouch -- alokuje cała pamiec od razu, zamiast na zadanie. Eliminuje lag spike'y przy rozszerzaniu heapu
  • G1NewSizePercent=30, G1MaxNewSizePercent=40 -- 30-40% heapu na obiekty krótko zyjace (chunki, bufory). Minecraft tworzy ich dużo
  • G1HeapRegionSize=8M -- rozmiar regionow G1. 8 MB jest optymalne dla Minecraft
  • InitiatingHeapOccupancyPercent=15 -- GC zaczyna sprzatac wczesnie (przy 15% zapelnienia), zamiast czekac az heap się zapelni
  • MaxTenuringThreshold=1 -- obiekty szybko przechodza do old gen, bo w Minecraft malo obiektow zyje dłużej niz kilka sekund
  • SurvivorRatio=32 -- mały survivor space, bo obiekty albo umieraja szybko, albo zyja dlugo

Alternatywne flagi z ZGC (Java 21+)

Jeśli uzywasz Javy 21 lub nowszej i masz 16+ GB RAM w systemie, ZGC może dac lepsze rezultaty niz 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 zyjace obiekty inaczej niz dlugo zyjace, co idealnie pasuje do Minecraft.

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

Jak ustawić flagi w popularnych launcherach

Oficjalny launcher Minecraft

  1. Otwórz launcher, przejdz do zakładki "Installations"
  2. Kliknij "..." przy swoim profilu, wybierz "Edit"
  3. Kliknij "More Options"
  4. W polu "JVM Arguments" usun domyslny tekst i wklej flagi Aikara
  5. Kliknij "Save"

Prism Launcher / MultiMC

  1. Kliknij prawym przyciskiem na instancje > "Edit Instance"
  2. Przejdz 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. Przejdz do ustawien (ikona zebatki)
  2. Znajdz 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. Niezaleznie od wymogu, uzywaj 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 niz 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 gornym rogu zobaczysz informacje o JVM: wersje Javy, ilość przydzielonego RAM-u i aktualny garbage collector. Upewnij się, ze:

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

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

Wskazówka: Jeśli prowadzisz serwer Minecraft (Paper, Purpur, Fabric), flagi Aikara są jeszcze wazniejsze niz w kliencie. Serwer zarzadza 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 domyslnymi flagami a Aikar może oznaczac 15 vs 20 TPS.

Komentarze