Trzeba przyznać, że Java nie najlepiej radzi sobie z zarządzaniem pamięcią, a już całkowicie kuleje w aplikacjach typowo interaktywnych, natomiast Ci co korzystają z takich modów jak FTB lub po prostu mają 100 dodatków – wymagania wzrastają o całe GB ramu! a to powoduje ze Garbage Collector nie wyrabia. Poniższy artykuł postara się namówić Javę do lepszego zarządzania sobie z pamięcią i śmieciami w niej. Skupiamy się na optymalizacji pod “Low Pause” i lepszym GC, domyślnie Java skonfigurowana jest pod przepustowość. Zobaczmy więc czy optymalizacja minecraft lub innej aplikacji przyniesie skutek.
Indeks
- 1.7.10
- 1.12.x
- 1.16.x – 1.19.x
Prolog
Zmusimy javę do lepszego zarządzanie śmieciami w pamięci, postaramy się użyć eksperymentalnych rozwiązań, wdrożymy mody które lepiej kominukują się z serwerem, kartą graficzną.Wysoka kompatybilność Javy z systemami wymusza używanie podstawowych nie zawsze dobrych poleceń przez twórców dlatego dalej musimy radzić sobie sami9.
Poniższy poradnik także pomaga rozwiązać problemy z błędem java.lang.OutOfMemoryError: PermGen space
Rozwiązania optymalizacyjne dla wybranych wersji Minecraft
1.12.2
Zalecane mody i rozwiązania optymalizacyjne:
BetterFPS (link)– optymalizacja algorytmów Sin & Cos w różnych wriantach, po pobraniu pliku *.jar obowiązkowo uruchomić go i przeprowadzić test algrytmów i kliknąć “Change algorithm” (wybierze ten najlepszy). Po testach instalujemy lub wrzucamy do katalogu mods (klawisz windows+x, %appdata%/.minecraft/mods)
FastWorkbench (link) – Usuwa system podpowiedzi crafingu oraz optymalizuje cache wszystkich receptur, zmniejsza obciążenia sieci, logowania, interfejsu. Wyłącza całkiem moduł podpowiedzi crafitngu, jak ktoś używa JEI to raczej nie będzie tęsknił.
FoamFix (link) – Optimalizacja modyfikacji i ich zarządzania pamięcią, teksturami czy przechowywaniem niepotrzebnych rzeczy w pamięci.
Optifine (link) – Dodaje wiele optymalizacji i trybów pracy poszczególnych elementów gry, pozwala na optymalizacje funkcji renderującej, sposobu ładowania chunków, potężna optymalizacja, może być niekompatybilny z niektórymi modami (mały %).
1.7.10
(dla 1.7.10) Najważniejszy i najlepszy: FastCraft (client oraz server) – usprawnia wiele mechanik samej gry, np. zmniejsza częstotliwość przeliczania świateł z kilkunastu na sekundę do
1 na sekundę, a my sami nie dostrzegamy wizualnych zmian
później Optifine – ale ten może powodować problemy z teksturami niektórych modów (np. Chisel), więc, zanim zaczniecie grać, potestujecie, natomiast sa mod usprawnia silnik renderatora grafik i sposób zarządzania teksturami
Wszystko wrzucamy do foleru /mods, mogą działać jednocześnie
- Fastcraft (client oraz serwer)
- Optifine
- BetterFps
- Przejdź na Jave-64 bit (http://filehippo.com/pl/search?q=java);
Sprawdź swoją wersję z CMD polceniem Java -version, powinien być dopisek X64
1.16.x – 1.19.x
Sodium – silny konkurent Optifine w wersji dla FABRIC
Mangesium – port Sodium dla Forge
Titanium – kolejne porty sodium dla Forge
FerriteCore – optymalizacja pamięci dla Forge
AI Improvements – usprawnienie inteligencji (AI) mobów, wielowatkowe i poprawione wszukiwanie scieżek i decyzji
MCMT – próba wdrożenia wielowątkowości do wszelkich elementów (obiekty, moby, odświeżanie świata (tick))
Smooth Boot (fabric) (forge) [serwer i klient] – próba optymalizacji wczytywania gry (ekran ładowania)
Krypton Reforged (forge) [serwer i klient] – optymalizacjia protkołu sieciowego dla osób grających online (wpływa na CPU).
Out Of Sight – wyłączanie renderingu obiektów włącznie ze świat łami i itemami pochodzących z modów dla gracza oddalonego od nich o minimum 24 bloki.
Starlight (fabric) (forge) – napisany na nowo silnik oświetlenia,
Polcenie lini komend dla launchera
-Xmx5120m -Xms2560m -XX:+TieredCompilation -Xincgc -XX:+UseBiasedLocking -XX:+UseCodeCacheFlushing -XX:+UseStringCache -XX:+OptimizeStringConcat -XX:-UseFastEmptyMethods -XX:-UseFastAccessorMethods -XX:+UseConcMarkSweepGC -XX:MaxHeapFreeRatio=25 -XX:MinHeapFreeRatio=20 -XX:SurvivorRatio=10 -XX:MaxTenuringThreshold=4 -XX:MaxPermSize=512 -XX:UseSSE=4 -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:+CMSIncrementalPacing -XX:ParallelGCThreads=4 -XX:+UnlockExperimentalVMOptions -XX:+UseCompressedOops -XX:ObjectAlignmentInBytes=16
Rezultatem powinien być ogromny wzrost wydajności MCm który potwierdzam. I może sprawa pomijalna co dla niektórych – powyższe optymalizacje zmniejszają zużycie prądu, co przy wielogodzinnych rozgrywkach przynosi faktyczne oszczędności.
Przygotowanie minimalne
- Nie posiadam launcherów, mam czystego MC
- wduś win+r
- wpisz %appdata%/.minecraft/bin/
- otwórz przez WinRar plik minecraft.jar
- Umieść wszystkie pliki
- Posiadam gotowe paczki
Pobrać mody z sekcji “szybkie rozwiązania” i umieścić w folderze /mods.
Gotowe rozwiązania typu FTB czy ATLauncher mogą zawierać własne rozwiązania optymalizacyjne które bardzo polecam dla każdego początkującego, pozbędziecie się problemów z manualną konfiguracją modów i rozpoczniecie rozgrywkę industrialną w 10min, zamiast w 1h.
Przykładowe polecenia do rozruchu
Przykładowy command line który sam stosuję w cliencie oraz serwerze
Kod z 24.08.2015 : usunięto niepotrzebne logi wykorzystania z konsoli, rozbudowano o kolejne polecenia,optymalizacyjne. Uwaga jeżeli gra crashuje, wyłacza się, to prawdopodobnie serwer (dedykowany) używa innych poleceń, zalecane jest ich użycie po obu stronach
-Xmx5120m -Xms2560m -XX:+TieredCompilation -Xincgc -XX:+UseBiasedLocking -XX:+UseCodeCacheFlushing -XX:+UseStringCache -XX:+OptimizeStringConcat -XX:-UseFastEmptyMethods -XX:-UseFastAccessorMethods -XX:+UseConcMarkSweepGC -XX:MaxHeapFreeRatio=25 -XX:MinHeapFreeRatio=20 -XX:SurvivorRatio=10 -XX:MaxTenuringThreshold=4 -XX:MaxPermSize=512 -XX:UseSSE=4 -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:+CMSIncrementalPacing -XX:ParallelGCThreads=4 -XX:+UnlockExperimentalVMOptions -XX:+UseCompressedOops -XX:ObjectAlignmentInBytes=16
Kod z 01.01.2015 : podstawowy kod optymalizacyjny
-Xmx5120m -Xms2560m -XX:+UseConcMarkSweepGC -XX:MaxHeapFreeRatio=25 -XX:MinHeapFreeRatio=20 -XX:SurvivorRatio=10 -XX:+PrintHeapAtGC -XX:+PrintTenuringDistribution -XX:MaxTenuringThreshold=4 -XX:MaxPermSize=512 -XX:UseSSE=4 -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:+CMSIncrementalPacing -XX:ParallelGCThreads=4
Jeden ze sposobów wystartowania
"C:\Windows\System32\javaw.exe" -Xmx2048M -Xms2048M -jar "Minecraft.exe" (pomiędzy java.exe" ... a ... -jar należny wkleić przykładowy cmd)
lub
javaw -Xmx2048M -Xms2048M -jar "Minecraft.exe"
lub
jeżeli używamy FTBLauncher bądź ATLauncher, opcja wprowadzenia parametrów dostępna jest z ustawień pod polem “Java arguments”. Należy pamiętać z launchery już z góry mają większość argumentów predefiniowanych, nie widzimy tego od razu. Dla zapewnienia dostępności gry większości z tych parametrów się normalnie nie stosuje, bo mogą więcej zaszkodzić dla starszego sprzętu niż mu pomóc, dlatego musimy sami rozpracować wiele parametrów i dostosować je do własnego środowiska. Domyślnie MC jest nastawiony na stabilność niżeli na szybkość, ten artykuł pomija kwestię stabilności.
Podsumowanie
Użycie modów z sekcji szybkich rozwiązań Optifine + BetterFps + Fastcraft (client/server)+ polecenia optymalizacyjne wraz z 200 modami dało naprawdę zauważalne rezultaty w optymalizacji wbijające w krzesło i chociaż wiem że to nie koniec zabawy z javą i sama mechaniką gry, to rozbudowa tego artykułu będzie trwać nadal.
Opis poleceń
Uruchomić grę z dodatkowymi parametrami dodając parametry do skrótu lub do specjalnego pola w wybranym launcherze
Użyjemy trybu CMS, jest wielowątkowy i asynchroniczny więc nie powinien wpływać na całą grę jednym wielkim szarpnięciem jak by to robił Parallel.
Znak -XX:+ oznacza AKTYWACJĘ a -XX:- DEZAKTYWACJĘ parametru
- -XX:+UseConcMarkSweepGC (rodzaj garbage collectora, tzw LOW PAUSE czyli CMS, częsty, szybki, małe szarpnięcia)
- -XX:+UseParNewGC (parametry powyższego GC, próba zapewnienia responswyności aplikacji, mniejsza agresja GC, wielowątkowy, najwydajniejszy przy wielordzeniach, automatycznie dodawana przy UseConcMarkSweepGC )
- -XX:ParallelGCThreads=2 (można dopisać więcej, zależne od rdzeni w naszym pc, domyślnie jest 1)
- -XX:UseSSE=4 (używać wtedy kiedy nasz CPU wspiera polecanie SSE 4 – do sprawdzenia z Aida64)
- -XX:+AggressiveOpts (zezwolenie na parametry optymalizacyjne)
- -XX:MaxPermSize=128m (miejsce na większą część kodu gry, klasy, metody które sa prawie zawsze potrzebne – garbage collector omija to miejsce, mowa o błędzie z porologu)
- -XX:PermSize=128m (tak jak wyżej, ale żeby nie męczyć JVM analizą)
- -Xmn128m (rozmiar pamięci dla młodych obiektów które garbage collector pomija przez jakiś czas)
- -Xmx5120m (maksymalna pamieć przydzielona, dążąca)
- -Xms1024m (minimalna pamięć – zarezerwowana od razu po uruchomieniu)
- -XX:+UnlockExperimentalVMOptions – (zezwolenie na nieoficjalne parametry testowe)
- -XX:-UseFastEmptyMethods – optymalizacja dla typów prymitywnych (podstawowe typy zmienny), przestarzałe od javy 1.7
- -XX:-UseFastAccessorMethods – optymalizacja dla typów prymitywnych (podstawowe typy zmienny), przestarzałe od javy 1.7
- -XX:+UseStringCache – optymalizacja dla zmiennych typu tekstowego (w pamięci), usuniętę od JDK 8
- -XX:+CompactStrings – kolejna optymalizacja alokowania zmiennych tekstowych w pamięci, mierzalny wzrost wydajności w testach syntetycznych
- -XX:+UseCompressedStrings – kiedy użyjemy tej opcji, zmienne tekstowe są przechowywane w pamięci jaki tablica bajtów byte[] zamiast tablicy znaków char[] (znacząca optymalizacja), możliwe, że usunięta w JDK 8 jako mogąca powodować problemy z wydajnością, od JAVY 9 domyślnie wszystkie zmienne tekstowe są definiowane jako byte[]
- -XX:+OptimizeStringConcat – próba uproszczenia i zoptymalizowania łączenia/tworzenia łańcuchów tekstowych ,przykład poniżej. Bez optymalizacji : 15 sek, Z optymalizachją: 5 sek (w przykładowym algorytmie)
- -XX:+UseNUMA – uruchomienie wsparcia dla NUMA [Non-Uniform Memory Access] pozwala na lepsze zarządzanie pamięcią procesora i zależy od aktualnej architektury Twojego systemu, stara się przenosić mniejsze kawałki zaalokowanej pamięci, raczej testowe użycie
- -XX:+UseLargePages – opcja mogąca przyśpieszyć lub też spowolnić zarządzanie stronami pąmięci od 6% do 8% (jeżeli używana z NUMA), źródło
- -XX:+UseG1GC – alternatywa dla CMS, można próbować
Dla porównania, używanie XX:UseParallelOldGC powoduje opóźnienia z powodu czyszczenia na poziomie 750ms gdzie przy CMS te opóźnienie wacha się w granicy 65ms, natomiast dla G1 może spać nawet do 50ms. (brak testów z mojej strony).
Jeżeli chcecie dokonać własnych analiz GC to wystarczy dodać -XX:+PrintGCTimeStamps -Xloggc:/analizy/gc-test.log -XX:+PrintGCDetails
Konfiguracje
Użycie 2GB RAM
javaw -Xmx2048m -Xms1024m -jar “C:\<ścieżka>\Minecraft.exe”
Użycie 3GB RAM
javaw -Xmx3072m -Xms1536m -jar “C:\<ścieżka>\Minecraft.exe”
Użycie 4GB RAM
javaw -Xmx4096m -Xms2048m -jar “C:\<ścieżka>\Minecraft.exe”
Użycie 8GB RAM
javaw -Xmx8192m -Xms4096m -jar “C:\<ścieżka>\Minecraft.exe”
PROBLEMY Z MODAMI (FTB)
\config\foamfix.cfg
i dodanie parametru B:disableTextureAnimations=true
Polecane, industrializacja i automatyzacja rozgrywki
Żaden inżynier, fanatyk automatyzacji i procesów nie ma prawa obejść się bez poniższych modów, te zmieniają całkowicie opinię na temat samego minecrafta która bywa różna i raczej negatywna, nakręcana przez dzieciaków grających w wersje podstawową robiących niepotrzebny smród w sieci . Programowanie w grze, układy logiczne, optymalizacje, zarządzanie – to to czego brakowało nam w tej grze, wszystkie te potrzeby zapewniają poniższe mody które polecam wszystkim szukających rozrywki na co najmniej 3 miesiące rozwoju technologicznego, a które gdybym mógł to bym stosował do nauki :)
06.2022 – STACIA
Stacia, kuzyn FTB
Spis modów wchodzących w skład.
FTB – Feed The Beast
jako zlepek wielu modów industrialnych, logicznych bez konieczności ręcznej konfiguracji, wypromowana przez gracza Direwolf20
Resonant Rise, ATLauncher – Kolejny mod na fundamentach FTB ale o jeszcze większym natężeniu modów (przekraczającym 200!). Z powodu ekstremalnej rozbudowy możliwości będziesz potrzebował lepszego sprzęu i masy czasu na opanowanie chociaż połowy możliwości.
Zasoby
Dyskusja na temat optymalizacji mc : http://www.sk89q.com/2013/03/improving-your-minecraft-servers-performance/
Fajanie że jest ktoś taki jak ty . Napisałeś jak ustawić mc na max fps i fajnie.niedawno kupiłem sobie procka z xeona ale zapomniałem że Mc chodzi na jednym rdzeniu a tu piszesz że mozna to ustawić wielkie dzięki :D
Ciesze się, że udało mi się pomóc chociaż trochę :)
Rewelacja, po prostu brak mi słów! W pełni zgadzam się również ze stwierdzeniem, że Minecraft jest najbardziej niedocenianą grą na świecie. Jego potencjał, nawet bez modów jest olbrzymi… i absolutnie nieznany 99% graczy.
-Xmx5G -XX:+UseConcMarkSweepGC -XX:+CMSIncrementalMode -XX:-UseAdaptiveSizePolicy -Xmn128M -XX:PermSize=1G -XX:ParallelGCThreads=4 -Xms4G Na 8 gb ram wystarcza (Argumenty pod HUSBOX 4)
Dla mnie bez optifine gra laguje :(
Na tych argumentach ale HUSBOX 4 max 70 fps min 30 fps (Chyba dobrze co nie?