Optymalizacja Minecraft oraz Java – więcej fps, mniej zacięć

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

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.

(ノ◕ヮ◕)ノ*:・゚✧

Zobacz obraz źródłowy

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

  1. Fastcraft (client oraz serwer)
  2. Optifine 
  3. BetterFps
  4. 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,

Starlight  oraz czasy reakcji generatora świateł po wygenerowaniu 10404 chunków w odniesieniu do moda Phosphor (sodium) oraz wersji domyślnej

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

Optifine + Forge

  1.  wduś win+r
  2. wpisz %appdata%/.minecraft/bin/
  3. otwórz przez WinRar plik minecraft.jar
  4. 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

Screenshot_320

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

Types-of-Java-Garbage-Collectors3_th_thumb
Zasady działań Garbage Collectorów

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.

industrial minecraft
9161221877_14e20fc5ab_o
cYByGBG

Zasoby

Dyskusja na temat optymalizacji mc : http://www.sk89q.com/2013/03/improving-your-minecraft-servers-performance/

Figure-4
przykład pracy GC

4 odpowiedzi na “Optymalizacja Minecraft oraz Java – więcej fps, mniej zacięć”

  1. 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

  2. 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.

  3. -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?

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *

Anty-Spam test

ENG: Third planet of the solar system? PL: Trzecia planeta układu słonecznego?

  1.    Ziemia / Earth
  2.    Jupiter / Jowisz
  3.    Sun / Słońce
  4.    Merkury / Mercury
  5.    Mars / Mars
  6.    Pluton / Pluto
  7.    Wenus / Venus