rocketminers.de - Forum
Gut zu wissen: JVM Arguments und OptiFine - Druckversion

+- rocketminers.de - Forum (https://board.rocketminers.de)
+-- Forum: Leben auf rocketminers.de (https://board.rocketminers.de/forumdisplay.php?fid=28)
+--- Forum: Feedback (https://board.rocketminers.de/forumdisplay.php?fid=37)
+---- Forum: Minecraft Server (https://board.rocketminers.de/forumdisplay.php?fid=38)
+---- Thema: Gut zu wissen: JVM Arguments und OptiFine (/showthread.php?tid=418)



Gut zu wissen: JVM Arguments und OptiFine - aspiro - 19.11.2015

Hallo!

Hier werden die JVM Argumente erklärt.
Auf die Idee bin ich durch diesen Forenbeitrag gekommen. Auf der Suche nach "Für was steht dieses oder jenes Argument" bin ich auf diesen Thread gestoßen. Die einzelnen Erklärungen zu den Argumenten habe ich mir zusammengesucht. Ich hoffe euch hilft es.


JVM steht für Java Virtual Maschine und die Argumente stellen die VM ein.
  • -Xmx
Setzt fest, wieviel Speicher im Speicherpool maximal genutzt wird. Sollet ihr 4GB RAM haben könnt ihr zwischen 2,5-3 GB für Minecraft reservieren. (Je nachdem wieviel im Hintergrund läuft)
3GB wären 3g bzw. 2,5GB wären 2500m Also:

Code:
-Xmx3g bzw. –Xmx2400m

1-2GB sollten für das System und Hintergrundprogramme bleiben. Mehr als 12GB für Minecraft macht nur Sinn, wenn ihr sehr hochauflösende Resource Packs (mehr als 128x128) benutzt.
  • -Xms
Setzt fest, wieviel Speicher beim Start der JVM im Speicher besetzt wird. Dieser ist dann fest Minecraft zugewiesen. Der Wert sollte mindestens die Hälfte vom –Xmx eingeräumten Wert sein. Kann aber bei PCs mit z.B. 8GB ohne Problem identisch sein.
Zitat:-Xms3g bzw. -Xms8g

  • -Xmn
Jetzt kommt das erste interessante Argument. In Java werden Objekte unter anderem in ihrem „alter“ unterschieden. Die Garabage Collection -kurz GC- (automatische Speicherbereinigung) in Java identifiziert Objekte die im Speicher gelagert werden, aber gar nicht mehr gebraucht werden. Beispiel: Ihr rennt durch die Raketenbasis, dann seht ihr die Hochhäuser usw. da ihr aber weiter in die Richtung rennt, werden die Objekte außerhalb euer Sichtweise hinter euch uninteressant. Also werden diese aus dem RAM geworfen. Nachteil ist, wenn ihr wieder zurück rennt sind die Objekte weg und müssen neu nachgeladen werden. Damit ihr genug Puffer habt setzt wir den Wert auf mindestens 33% vom –Xmx wert.
  • -XX:ReservedCodeCacheSize=
Legt fest wieviel Ram für Code reserviert wird. Code unterscheidet sich vom Objekten und sollte min. 33% aber auch nicht mehr als 2-3GB RAM einnehmen.
Code:
-XX:ReservedCodeCacheSize=2G  bzw. -XX:ReservedCodeCacheSize=512m
 
  • -XX:+DisableExplicitGC
Deaktiviert das System.gc(). Kurz gesagt ist der Minecraft-Code nicht besonders performant programmiert. Und System.gc() ist nicht besonders schnell. Ohne diese Option würde Java viel zu früh eure Objekte aus dem RAM werfen, und das nicht besonders schnell. Durch den höheren Speicherpool brauchen wir das jetzt nicht mehr.
  • -XX:+UseConcMarkSweepGC , -XX:+UseParNewGC , -XX:ParallelGCThreads=10 , XX:+UseAdaptiveGCBoundary , -XX:-UseGCOverheadLimit , XX:MaxGCPauseMillis=30 , -XX:GCPauseIntervalMillis=150 , -XX:SoftRefLRUPolicyMSPerMB=20000 , -XX:+CMSParallelRemarkEnabled , -XX:MaxTenuringThreshold=15 , -XX:SurvivorRatio=8 , -XX:TargetSurvivorRatio=90 , -XX:+UseBiasedLocking , 
Diese Optionen regeln, welche Methode für GC genutzt werden soll.
Hier ist wichtig, dass GC auf mehrere Threads aufgeteilt wird und effektivere und neuere Algorithmen genutzt werden.
Dadurch arbeitet das GC insgesamt schneller. Durch das trimmen der Intervalle, wie lange ein Intervall dauern darf usw. solltet ihr ein flüssiges Spielerlebnis bekommen. Knackpunkte: Wenn eure CPU eine geringe Bandbreite zum RAM hatt und die einzelnen Threads von der CPU an sich nicht schnell bearbeitet werden, bringen euch diese Optionen nicht besonders viel. Dann solltet ihr den RAM genau einstellen. Mit den Optionen die OptiFine anbietet, kann man Minecraft auf die Leistungsfähigkeit deines Systems runter schrauben.
  • -XX:+UseNUMA 
Kurz: Non Uniform Memory Access Mit diesem Argument aktivieren wir ein besseres Verfahren den Speicher anzusprechen. Wird nicht von allen CPUs (älter als ca. 5 Jahre) unterstürzt.
  • -XX:+UseFastAccessorMethods , -XX:+UseCompressedOops , -XX:+OptimizeStringConcat , -XX:+AggressiveOpts , -XX:+UseCodeCacheFlushing , -XX:SoftRefLRUPolicyMSPerMB=20000 
Diese Einstellungen befassen sich nochmal mit dern optimalen Art und Weise, wie auf den RAM zugegriffen wird. Die Argumente stellen die JVM optimal auf Minecraft ein. Damit der RAM schnell und wirksam genutzt wird. Diese Einstellungen sind wichtig für die schwächeren PCs.
  • -Dfml.ignorePatchDiscrepancies=true , -Dfml.ignoreInvalidMinecraftCertificates=true 
Diese beiden Argumente helfen Fehler in Verbindung mit der Mod OptiFine zu beheben bevor sie auftauchen. Sollte ein Minecraft Update oder serverseitige Updates installiert werden, würde OptiFine nicht mehr funktionieren. Da Minecraft überprüft ob die Versionen identisch sind, nicht ob sie kompatibel sind.


Wenn du eine PC besitzt der nicht mal 64bit fähig ist, gehe ich von 1GB verfügbaren RAM aus. Versuch es mit diesen Einstellungen. Auch wenn der Leistungszuwachs nicht besonders groß sein wird, 10 FPS mit den entsprechenden Einstellungen in OptiFine solltet ihr aber rausquetschen können.


Zitat:-Xmx1G -Xms1G -Xmn128m -XX:+DisableExplicitGC -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:+UseNUMA -XX:+CMSParallelRemarkEnabled -XX:MaxTenuringThreshold=15 -XX:MaxGCPauseMillis=30 -XX:GCPauseIntervalMillis=150 -XX:+UseAdaptiveGCBoundary -XX:-UseGCOverheadLimit -XX:+UseBiasedLocking -XX:SurvivorRatio=8 -XX:TargetSurvivorRatio=90 -Dfml.ignorePatchDiscrepancies=true -Dfml.ignoreInvalidMinecraftCertificates=true -XX:+UseFastAccessorMethods -XX:+UseCompressedOops -XX:+OptimizeStringConcat -XX:+AggressiveOpts -XX:ReservedCodeCacheSize=2048m -XX:+UseCodeCacheFlushing -XX:SoftRefLRUPolicyMSPerMB=2000 -XX:parallelGCThreads=10


Also lasst mich wissen ob es euch geholfen hat, oder ob ihr noch Argumente habt die ich nicht erwähnt habe. Ist mir ein Fehler unterlaufen?

Als nächstes würde ich auf die Befehle vom Server eingehen. Was haltet ihr davon?