Les arguments JVM, ce sont les options passées à Java au démarrage du serveur. Sur un pack de plus de quatre cents mods comme Arcadia, ils font la différence entre un serveur qui tient vingt joueurs et un serveur qui se fige toutes les trente secondes. Bonne nouvelle: le serverpack arrive déjà réglé. Cette page t'explique ce que fait chaque ligne, et surtout ce qu'il ne faut pas toucher.
Où vivent les arguments
Tout se trouve dans le fichier user_jvm_args.txt, à la racine du serveur. Les scripts de lancement le passent à Java avec la syntaxe @user_jvm_args.txt, puis ajoutent les arguments propres à NeoForge. Concrètement, tu n'as jamais besoin de taper une longue commande java à la main: tu édites ce fichier avec un éditeur de texte, tu relances, c'est tout.
La RAM, la seule chose que tu dois vraiment régler
Deux lignes commandent la mémoire:
- -Xms définit la mémoire allouée au démarrage.
- -Xmx définit la mémoire maximale.
Sur un serveur Minecraft, ces deux valeurs doivent être identiques. Java réserve alors tout d'un coup et ne passe pas son temps à agrandir puis rétrécir son tas, ce qui provoque des à coups. Le pack est livré avec 16 384 Mo sur les deux lignes.
| RAM de la machine | À mettre dans Xms et Xmx | Pourquoi |
|---|---|---|
| 16 Go | 10240M | Il faut laisser 6 Go au système et au reste |
| 24 Go | 16384M | Le point d'équilibre pour ce pack |
| 32 Go et plus | 16384M | Monter plus haut dégrade les performances |
Le ramasse miettes et les flags Aikar
Le reste du fichier configure G1GC, le ramasse miettes de Java. Les valeurs viennent des flags Aikar, la référence dans le monde des serveurs Minecraft. Voici ce que font les principales:
| Argument | Rôle |
|---|---|
| -XX:+UseG1GC | Active G1, le ramasse miettes qui découpe le travail en petites pauses plutôt qu'en longs blocages |
| -XX:MaxGCPauseMillis=200 | Demande à G1 de viser des pauses de 200 ms maximum |
| -XX:+ParallelRefProcEnabled | Traite les références en parallèle, gain net avec beaucoup de mods |
| -XX:+AlwaysPreTouch | Touche toute la mémoire au démarrage. Le lancement est plus lent, la suite est plus régulière |
| -XX:+DisableExplicitGC | Empêche un mod mal écrit de déclencher un nettoyage complet à la main |
| -XX:+UseStringDeduplication | Fusionne les chaînes de caractères identiques en mémoire, utile avec des milliers de recettes |
| -XX:G1NewSizePercent=30 et G1MaxNewSizePercent=40 | Agrandissent la zone des objets jeunes. Minecraft en crée énormément et les jette aussitôt |
| -XX:G1HeapRegionSize=8M | Taille des régions du tas, adaptée à un gros tas |
| -XX:InitiatingHeapOccupancyPercent=15 | Lance le nettoyage tôt, avant que le tas ne sature |
| -XX:MaxTenuringThreshold=1 | Promeut vite les objets survivants, ce qui limite les copies inutiles |
| -XX:+PerfDisableSharedMem | Évite les blocages disque causés par le fichier de statistiques de la JVM |
Deux lignes concernent le Metaspace, la zone où Java range les classes: -XX:MetaspaceSize=256M et -XX:MaxMetaspaceSize=1024M. Avec plus de quatre cents mods, il faut de la marge, sinon Java passe son temps à redimensionner cette zone. Enfin, -Dlog4j2.configurationFile=log4j2.xml impose la configuration de journalisation fournie avec le pack, et -Dusing.aikars.flags sert uniquement de marqueur pour les outils de supervision.
La variante GraalVM
Le pack fournit un second fichier, user_jvm_args_graalvm.txt, à n'utiliser que si tu as installé Oracle GraalVM 21. Il reprend les mêmes réglages mémoire et G1GC, puis ajoute le compilateur maison de GraalVM avec -XX:+EnableJVMCI, -XX:+UseJVMCICompiler et -XX:+EagerJVMCI, plus des options de compilation comme la vectorisation SIMD et le déroulage partiel de boucles. On y trouve aussi -XX:+UseTransparentHugePages, qui demande de grandes pages mémoire au système, et -XX:+EnableDynamicAgentLoading, nécessaire à certains profileurs.
Les erreurs qu'on voit tout le temps
- Xms et Xmx différents. C'est l'erreur classique. Mets les deux à la même valeur.
- Allouer toute la RAM de la machine. Le système d'exploitation a besoin de mémoire pour le cache disque, qui accélère justement le chargement des chunks.
- Doubler les arguments. Si ton hébergeur passe déjà un -Xmx dans sa commande de démarrage, ne le remets pas dans le fichier: la dernière valeur gagne et tu ne sais plus laquelle s'applique.
- Copier des flags trouvés au hasard. Beaucoup de listes qui circulent sont écrites pour Java 8 et cassent sous Java 21. Les options de l'ancien ramasse miettes CMS, par exemple, n'existent plus.
- Se tromper de Java. Le pack tourne sous Java 21. Une version plus ancienne refuse simplement de charger NeoForge.
Vérifier que tes réglages sont bien pris

Le pack embarque déjà plusieurs mods qui allègent le serveur sans réglage de ta part: ModernFix accélère le démarrage et réduit la mémoire, FerriteCore compresse les données de blocs, Lithium optimise la logique du jeu. Tes arguments JVM viennent en complément de ces mods, pas à leur place.
Au démarrage, le script affiche la version de Java avant de lancer le serveur: tu dois y voir Temurin 21 ou GraalVM 21 selon ton choix. Ensuite, en jeu ou en console, la commande spark health te donne la mémoire réellement utilisée, l'activité du ramasse miettes et les TPS. Si le tas monte au plafond puis redescend en permanence avec des pauses longues, c'est que ton allocation est trop juste pour le nombre de joueurs et de chunks chargés.
Où continuer
Pour l'installation depuis zéro, suis Installer son serveur Arcadia, puis Lancer et configurer son serveur pour le fichier server.properties. Le diagnostic des lags et l'usage de Spark sont détaillés dans Optimiser et diagnostiquer son serveur, et la mise en service permanente dans Maintenir son serveur. Enfin, côté joueur, la RAM du client se règle dans Allouer de la RAM, ce qui n'a rien à voir avec le serveur.