JVM-Flags für Minecraft (besser bekannt als Aikar's Flags) sind ein Satz Java-Startargumente, der den Garbage Collector so abstimmt, dass dein Server nicht alle paar Minuten für den Bruchteil einer Sekunde „einfriert“. Ein einfacher Start über java -Xmx lässt die Standardwerte stehen — und genau diese Standardwerte bescheren dir schwankende TPS und Ruckler. Die fertige Flag-Zeile, ihre Anwendung und realistische Erwartungen findest du unten.
Warum ein Server mit Standardstart ruckelt
Ein Minecraft-Server ist in Java geschrieben und läuft in der JVM — einer virtuellen Maschine, die den Speicher für dich verwaltet. Objekte (Chunks, Entities, Items) werden ständig erzeugt und zerstört, und diesen Speicher freizugeben ist die Aufgabe des Garbage Collectors (GC). Modernes Java nutzt standardmäßig den Collector G1GC, und der ist ordentlich — aber seine Standardeinstellungen sind auf „durchschnittliche“ Server-Software ausgelegt, nicht auf eine Spielschleife, die in 50 ms pro Tick passen muss.
Der Hauptschmerz sind Stop-the-World-Pausen. Um Müll sicher wegzuräumen, hält die GC kurz alle Arbeitsthreads des Servers an. Zieht sich eine solche Pause über 150–300 ms, schafft der Hauptthread seinen Tick nicht, und du bekommst den klassischen Freeze: Mobs ruckeln, Blöcke werden verzögert gesetzt, Spieler werden zurück „gezogen“. In der Konsole zeigt sich das oft durch Zeilen wie Can't keep up! Is the server overloaded?.
Wenn du einen Server von Grund auf aufbaust, behalte das schon bei der Einrichtung im Blick — der Guide, wie du einen Minecraft-Server erstellst, behandelt die Grundlagen, und Flags sind die nächste Optimierungsebene darüber.
TPS (Ticks pro Sekunde) gibt an, wie viele Spielticks der Server pro Sekunde schafft; 20 ist ideal. MSPT (Millisekunden pro Tick) gibt an, wie lange ein einzelner Tick dauert; solange die MSPT unter 50 ms bleiben, halten die TPS bei 20. Eine lange GC-Pause schiebt einen Tick sofort über 50 ms — und das ist der Freeze.
Was Aikar's Flags tatsächlich bewirken
Aikar's Flags sind ein sorgfältig abgestimmter Satz JVM-Argumente vom Paper-Entwickler mit dem Namen Aikar. Die Idee ist einfach: Statt G1GC Müll horten und ihn dann in großen „Schüben“ wegräumen zu lassen, bringen die Flags den Collector dazu, öfter, aber in kleinen Portionen zu arbeiten. Jede einzelne Pause wird kurz und vorhersehbar, das Pausenziel ist fest auf 200 ms gesetzt, und in der Praxis liegen die meisten Pausen im ein- bis niedrigen zweistelligen Millisekundenbereich.
Die zentralen Prinzipien in diesem Satz:
- -Xms gleich -Xmx. Java verschwendet keine Zeit damit, den Heap schrittweise „wachsen“ zu lassen, und reserviert gleich die volle Menge — der Speicher schwankt nicht, die Pausen sind gleichmäßiger.
- Vorzeitige Speicherbelegung (
AlwaysPreTouch). Der ganze Heap wird beim Start angefasst statt träge während des Spiels, wo er Mikro-Hänger verursachen würde. - Eine große junge Generation (
G1NewSizePercent=30,G1MaxNewSizePercent=40). Für das Allokationsmuster von Minecraft senkt das die Häufigkeit teurer Sammlungen deutlich. - Parallele Referenzverarbeitung (
ParallelRefProcEnabled) und deaktivierte explizite GC (DisableExplicitGC), damit ein schlecht geschriebenes Plugin keine vollständige Sammlung per Aufruf vonSystem.gc()auslösen kann.
Die vollständige Zeile mit JVM-Flags für Minecraft
Hier die aktuelle Zeile mit Aikar's Flags. Ändere nur zwei Werte — -Xms und -Xmx (sie müssen gleich sein) — und lass alles andere, wie es ist. Das Beispiel zeigt einen Heap von 8 GB; trag deine eigene Menge ein.
java -Xms8G -Xmx8G \
-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 \
-Dusing.aikars.flags=https://mcflags.emc.gs \
-Daikars.new.flags=true \
-jar server.jar --nogui
Die offizielle Empfehlung von Aikar: Weist du dem Server 12 GB oder mehr zu, erhöh die Regionsgröße auf -XX:G1HeapRegionSize=16M und setz G1NewSizePercent auf 40 und G1MaxNewSizePercent auf 50. Für Heaps bis 12 GB sind die Werte in der Zeile oben optimal.
So wendest du die Flags an
Wo genau du diese Zeile einfügst, hängt davon ab, wie dein Server gestartet wird.
Im Control-Panel (Pterodactyl)
Bei Elysium läuft dein Server im Pterodactyl-Panel, und die meisten Argumente sind in den Startparametern bereits gesetzt. Die JVM-Flags stehen in der Variable JVM Arguments (oder im Feld für den Startbefehl) — dort fügst du den ganzen Block der -XX:...-Flags ein, während -Xms/-Xmx meist automatisch vom Panel aus deinem gewählten Speicherlimit eingetragen werden. Nach dem Speichern startest du den Server einfach neu, damit die neue Config greift.
Im Startskript (dein eigener VPS)
Startest du den Server von Hand aus start.sh oder start.bat, ist die ganze Zeile dein Startbefehl. Unter Windows lässt du die Backslashes (\) weg — sie dienen nur dem Zeilenumbruch in bash — und schreibst den Befehl in eine Zeile. Stell sicher, dass du Java 17 oder neuer nutzt: Auf älteren Versionen werden manche der experimentellen Flags schlicht nicht erkannt.
Verdopple -Xmx nicht und lass kein altes Flag wie -XX:+UseConcMarkSweepGC neben -XX:+UseG1GC stehen — die JVM startet nicht mit zwei Garbage Collectors gleichzeitig, und der Server stürzt beim Start mit einem Fehler ab. Behalte immer genau einen Block Flags.
Wie viel RAM du bei -Xms und -Xmx eintragen solltest
Die Versuchung, dem Server den ganzen verfügbaren Speicher zu geben, ist groß, aber sie geht nach hinten los. Java verbraucht Speicher über den Heap hinaus: Metaspace, Thread-Stacks, Off-Heap-NIO-Buffer (über die genau die Chunks geladen werden). Dazu braucht das Betriebssystem selbst Reserve. Setzt du -Xmx auf die Obergrenze des physischen Speichers, stößt der Prozess unter Spitzenlast ans Limit, und der OOM-Killer beendet ihn.
| Speicher des Tarifs | Sinnvolles -Xms=-Xmx | Geeignet für |
|---|---|---|
| 4 GB (Pulse) | 3 GB | Vanilla / Paper, bis 10–15 Spieler |
| 6 GB (Vector) | 5 GB | Paper mit Plugins, leichte Modpacks |
| 8 GB (Nexus) | 6–7 GB | Mittlere Modpacks, eine aktive Server-Software |
| 12 GB (Apex) | 10 GB | Schwere CurseForge-/FTB-Modpacks |
| 16 GB (Titan) | 13–14 GB | Große Modpacks, Proxy-Netzwerke |
Die wichtigste Regel: -Xms ist immer gleich -Xmx, und das ist nicht der ganze Speicher des Servers, sondern ein Teil davon, mit 1–2 GB Reserve für das System. Wenn du nicht sicher bist, wie viel dein Modpack wirklich braucht, gibt es eine eigene Analyse — wie viel RAM ein Minecraft-Server braucht. Und bedenke: Bei Elysium ist der RAM des Tarifs (DDR5) das Limit des Containers deines Servers, deshalb muss -Xmx mit Reserve hineinpassen.
Wann Flags nicht mehr helfen
Aikar's Flags lösen ein bestimmtes Problem — Freezes durch die Garbage Collection. Sinken die TPS nach der Anwendung trotzdem und zeigt ein Profiler hohe MSPT ohne spürbare GC-Pausen, ist der Engpass nicht der Speicher, sondern die CPU. Minecraft führt fast seine gesamte Hauptschleife in einem einzigen Thread aus, deshalb zählen für Minecraft nicht „viele Kerne“, sondern ein hoher Takt auf einem Kern.
Typische Gründe für einen CPU-Engpass: eine zu hohe view-distance, überlastete Trichter und Redstone-Farmen, schwere Mods, überflüssige Plugins, Hunderte aktive Entities. Flags sind hier machtlos — du musst den Server profilieren (zum Beispiel mit spark) und die Quelle der Last beseitigen. Die vollständige Analyse steht im Guide, warum dein Server laggt und wie du das behebst. Auch die Wahl einer leichten Server-Software zählt viel: Der Vergleich Paper, Purpur und Vanilla zeigt dir, wo du ohne Hardware-Upgrade Ticks zurückgewinnen kannst.
Ein Wort zu ZGC
Bei sehr großen Heaps (etwa ab 12–16 GB) werden die Pausen von G1 länger, und dann lohnt sich ein Blick auf den Collector ZGC (-XX:+UseZGC). Er ist für Pausen unter einer Millisekunde fast unabhängig von der Heap-Größe gebaut, braucht dafür aber mehr CPU und RAM für seine internen Strukturen. Für einen typischen Server mit 4–10 GB ist das übertrieben — dort bleiben Aikar's Flags auf G1GC die beste Wahl. Wechsle bewusst zu ZGC und vergleiche die TPS vorher und nachher immer unter deiner eigenen Last.
Mythen über JVM-Flags
„Je größer -Xmx, desto besser.“ Nein. Ein größerer Heap ist mehr Speicher, den der Collector auf einmal durchkauen muss — also längere Pausen. Weise genau so viel zu, wie dein Modpack wirklich braucht, plus einen kleinen Puffer.
„Flags gleichen einen schwachen Hoster aus.“ Auch nein. Aikar's Flags sind Feinabstimmung auf vernünftiger Hardware, kein Ersatz dafür. Hat der Anbieter eine langsame Festplatte und Chunks laden verzögert, oder ist der CPU-Kern schwach und ein einzelner Thread reicht nicht, heilen das keine Flags. Gute Optimierung beginnt mit der richtigen Plattform — ausführlich erklärt im Guide, wie du Minecraft-Hosting auswählst.
Aikar's Flags zahlen sich am meisten auf Hardware mit schnellem Einzelkern und ehrlichem Speicher aus. Bei uns sind das AMD Ryzen 9 mit Boost bis 5,6 GHz, DDR5-Speicher und NVMe Gen4 — Welten und Chunks werden mit rund 7 GB/s gelesen und ziehen die TPS während der Garbage Collection nicht nach unten. Stell einen Server zusammen mit dem RAM, den du brauchst, und der richtigen Server-Software, und die Flags sind im Panel bereits eingetragen — du musst ihn nur noch starten.
Das Fazit ist einfach: Füg die bewährte Flag-Zeile ein, setz -Xms=-Xmx mit Reserve für das System, starte den Server neu — und die Freezes durch die Garbage Collection sind weg. Bleiben die Lags, liegt das Problem bei der CPU oder deiner Konfiguration, und dort musst du als Nächstes graben.