Zurück zum Blog
jvm flagsaikar's flagsserver startuplaunch scriptminecraft optimizationjava arguments

Minecraft Server Startoptimierung: JVM-Flags, Aikars Flags und Launch-Skripte erklärt

Veröffentlicht am 12. Juli 2026

# Minecraft Server Startoptimierung: JVM-Flags, Aikars Flags und Launch-Skripte erklärt

Die meisten Minecraft-Serveradmins kämpfen gegen Lag mit Config-Dateien und Plugin-Anpassungen — dabei übersehen sie eine der wirkungsvollsten Optimierungen überhaupt: wie der Server gestartet wird. Die JVM-Flags beim Start bestimmen direkt, wie Java Speicher verwaltet, Code kompiliert und den Garbage Collector ausführt. Wer diese falsch setzt, riskiert Lag-Spikes, lange Startzeiten und verschwendeten RAM — selbst auf leistungsstarker Hardware.

Dieser Leitfaden erklärt alles, was du für das perfekte Minecraft-Server-Startskript wissen musst.

---

Warum JVM-Flags so wichtig sind

Minecraft läuft auf der Java Virtual Machine (JVM). Die JVM ist verantwortlich für:

  • Zuweisung und Verwaltung von RAM (Heap-Speicher)
  • Den Garbage Collector (GC), der nicht mehr benötigte Objekte freigibt
  • Just-in-time (JIT)-Kompilierung von Java-Bytecode in nativen Maschinencode

Ohne Tuning verwendet Java generische Standardwerte, die für Desktop-Anwendungen gedacht sind — nicht für einen dauerhaft laufenden, latenzkritischen Spielserver. Das Ergebnis: lange GC-Pausen, langsames Laden von Klassen und instabile TPS.

---

Aikars Flags: Der Goldstandard für Minecraft-Server

[Aikars Flags](https://aikar.co/2018/07/02/tuning-the-jvm-g1gc-garbage-collector-flags-for-minecraft/) sind ein bekannter Satz von JVM-Argumenten, der speziell für Minecraft optimiert wurde. Sie konfigurieren den G1GC-Garbage-Collector so, dass Pausenzeiten minimiert und Minecrafts spezifische Speicherallokationsmuster optimal behandelt werden.

Hier ist der vollständige empfohlene Startbefehl für Server mit 12 GB RAM oder mehr:

java -Xms12G -Xmx12G \

-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

Für Server mit weniger als 12 GB solltest du -XX:G1HeapRegionSize auf 4M und -XX:G1NewSizePercent auf 20 reduzieren.

Wichtige Flags erklärt

| Flag | Funktion |

|---|---|

| -Xms / -Xmx | Legt minimale und maximale Heap-Größe fest. Immer gleich setzen, um Heap-Resizing-Pausen zu vermeiden. |

| -XX:+UseG1GC | Aktiviert den G1-Garbage-Collector, optimiert für kurze Pausenzeiten. |

| -XX:MaxGCPauseMillis=200 | Gibt dem GC das Ziel vor, Pausen unter 200 ms zu halten. |

| -XX:+AlwaysPreTouch | Reserviert den gesamten RAM beim Start, verhindert schrittweise Verlangsamung. |

| -XX:+DisableExplicitGC | Verhindert, dass Plugins System.gc() aufrufen und vollständige GC-Pausen auslösen. |

| -XX:InitiatingHeapOccupancyPercent=15 | Startet GC-Zyklen früher, bevor Speicherdruck entsteht. |

| -XX:+PerfDisableSharedMem | Verhindert, dass die JVM Performance-Daten auf die Festplatte schreibt und I/O-Stalls verursacht. |

---

Java-Version: Welche solltest du verwenden?

Für Minecraft 1.21+ empfehlen wir immer Java 21 (LTS). Java 21 enthält erhebliche Verbesserungen am G1GC und führt virtuelle Threads ein, die Paper und Folia für besseres asynchrones Task-Handling nutzen können.

Verwende keinesfalls Java 8 im Jahr 2024. Es fehlen Jahre an GC-Verbesserungen und Sicherheits-Patches.

Java-Version prüfen:

java -version

Java 21 auf Ubuntu/Debian installieren:

apt install openjdk-21-jdk-headless

---

ZGC: Besser als G1GC?

Für Server mit sehr großem Heap (32 GB+) oder Java 21 lohnt sich ein Experiment mit ZGC. ZGC ist ein nahezu pausenfreier Garbage Collector, der große Heaps hervorragend verwaltet.

Um zu ZGC zu wechseln, ersetze die GC-bezogenen Flags durch:

-XX:+UseZGC -XX:+ZGenerational

-XX:+ZGenerational ist ein Java-21-Feature, das ZGC generational macht und den Durchsatz für typische Minecraft-Workloads deutlich verbessert.

Hinweis: ZGC verbraucht mehr CPU als G1GC. Auf Maschinen mit wenigen Kernen bleibt G1GC die bessere Wahl.

---

Ein ordentliches Startskript schreiben

Ein einfaches java -jar server.jar reicht nicht aus. Hier ist ein produktionsreifes start.sh-Skript:

#!/bin/bash

MEM="10G"

JAR="paper-1.21.jar"

java -Xms$MEM -Xmx$MEM \

-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 \

-jar $JAR --nogui

Mit chmod +x start.sh ausführbar machen und in einer screen- oder tmux-Session starten, damit der Server nach dem Abmelden weiterläuft.

---

Häufige Fehler vermeiden

  • -Xmx höher als verfügbarer RAM setzen. Das führt dazu, dass das OS auf die Festplatte auslagert — katastrophal langsam. Mindestens 1-2 GB für das Betriebssystem freilassen.
  • -Xms niedriger als -Xmx setzen. Dadurch vergrößert die JVM den Heap schrittweise und erzeugt Pausen.
  • --nogui vergessen. Die Swing-GUI verschwendet CPU und RAM auf Headless-Servern.
  • Mehrere Server in derselben JVM betreiben. Jeder Server braucht seinen eigenen Prozess.
  • Flags nach einem Java-Upgrade nicht aktualisieren. Manche Flags sind versionsspezifisch.

---

Den Effekt überwachen

Nach dem Anwenden neuer JVM-Flags solltest du prüfen, ob sie tatsächlich helfen. Achte auf:

  • Reduzierte GC-Pausenhäufigkeit und -dauer (sichtbar in Server-Logs mit -Xlog:gc*)
  • Stabile TPS ohne Lag-Spikes alle paar Minuten
  • Gleichmäßigere Speichernutzung über Zeit

[PulseNode](https://pulsenode.tech) überwacht automatisch TPS, Speicherverbrauch und Performance-Trends deines Servers — so siehst du sofort, ob dein JVM-Tuning wirkt, ohne mühsam durch rohe Logs zu scrollen.

---

Schnellreferenz: Flags nach RAM-Größe

| Server-RAM | Empfohlener GC | G1HeapRegionSize | G1NewSizePercent |

|---|---|---|---|

| 4–8 GB | G1GC | 4M | 20 |

| 8–16 GB | G1GC | 8M | 30 |

| 16–32 GB | G1GC | 16M | 30 |

| 32 GB+ | ZGC (Java 21) | – | – |

---

Fazit

Dein Startskript ist das Fundament, auf dem alles andere aufbaut. Falsche JVM-Flags können jede andere Optimierung zunichtemachen — egal wie gut paper-world.yml oder spigot.yml konfiguriert sind. Investiere 10 Minuten, um das richtig aufzusetzen, und dein Server läuft von der ersten Tick an stabiler.

Starte mit Aikars Flags, passe die Heap-Größe an deinen verfügbaren RAM an, und steige auf Java 21 um, falls noch nicht geschehen. Dann beobachte die Ergebnisse — denn Optimierung ohne Messung ist nur Raten.

---

*Möchtest du sehen, wie dein Server nach diesen Änderungen performt? [PulseNode](https://pulsenode.tech) liefert dir Echtzeit-TPS-Monitoring und historische Performance-Daten, damit du genau weißt, was funktioniert.*

Server-Performance optimieren?

PulseNode überwacht deinen Minecraft Server in Echtzeit und gibt dir KI-gestützte Optimierungstipps.

Kostenlos starten
Minecraft Server Startoptimierung: JVM-Flags, Aikars Flags und Launch-Skripte erklärt — PulseNode Blog | PulseNode