0Pricing
Java Academy · Leçon

Options courantes de réglage de la JVM

Options du tas, du GC et du JIT

Options courantes de réglage de la JVM est une leçon Java Academy gratuite sur CoddyKit. Ceci est la leçon 4 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage Java Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours Java Academy comprend 4 leçons au total.

Pourquoi régler la JVM ?

La JVM possède des paramètres par défaut raisonnables, mais pour les services exigeants, vous pouvez parfois ajuster la taille du tas, le collecteur de ramasse-miettes et le comportement de la compilation à la volée.

Le réglage est une dernière étape : profilez d’abord, corrigez le code, puis utilisez les options uniquement lorsque les mesures le justifient.

Taille du tas : -Xms et -Xmx

Les deux options les plus courantes définissent les limites du tas :

  • -Xms — taille initiale du tas.
  • -Xmx — taille maximale du tas.

Exemple : java -Xms512m -Xmx2g MyApp. Définir -Xms à la même valeur que -Xmx évite les pauses dues au redimensionnement sur les serveurs qui fonctionnent longtemps.

Lire les paramètres par défaut

Vous pouvez demander à la JVM les valeurs qu’elle a choisies. Runtime expose les valeurs actuelles du tas, et -XX:+PrintFlagsFinal affiche la valeur effective de chaque option.

L’exemple affiche les limites mémoire de la JVM en cours d’exécution.

public class Main {
    public static void main(String[] args) {
        Runtime rt = Runtime.getRuntime();
        long mb = 1024 * 1024;
        System.out.println("Max heap (Xmx): " + (rt.maxMemory() / mb) + " MB");
        System.out.println("Total heap now: " + (rt.totalMemory() / mb) + " MB");
        System.out.println("Free in heap: " + (rt.freeMemory() / mb) + " MB");
        System.out.println("Available cores: " + rt.availableProcessors());
    }
}

Choisir un collecteur

Les JDK modernes proposent plusieurs collecteurs de ramasse-miettes :

  • -XX:+UseG1GC — le collecteur par défaut, équilibré et fondé sur des régions.
  • -XX:+UseZGC — pauses extrêmement courtes, grands tas.
  • -XX:+UseParallelGC — débit maximal, pauses plus longues.
  • -XX:+UseSerialGC — exécution sur un seul fil, pour les petites applications et les conteneurs.

Objectif de pause de G1

G1 est un collecteur orienté vers le temps de pause. Vous lui donnez un objectif et il tente de l’atteindre :

  • -XX:MaxGCPauseMillis=200 demande à G1 de maintenir les pauses autour de 200 ms.

Il s’agit d’un objectif indicatif, et non d’une garantie. Le définir à une valeur trop faible force des collectes fréquentes et courtes, ce qui peut nuire au débit.

ZGC pour une faible latence

Lorsque les temps de pause doivent rester inférieurs à la milliseconde, même avec des tas de plusieurs gigaoctets, utilisez ZGC avec -XX:+UseZGC.

Il effectue la majeure partie de son travail en parallèle des fils d’exécution de votre application. En contrepartie, il utilise un peu plus de CPU et de mémoire que G1. Il convient parfaitement aux services sensibles à la latence.

Journalisation du ramasse-miettes

Pour régler le ramasse-miettes, vous devez l’observer. Activez la journalisation unifiée :

  • -Xlog:gc*:file=gc.log:time,uptime,level,tags

Cette option enregistre chaque collecte avec son horodatage et sa durée. Transmettez le journal à un outil de visualisation (ou à JMC/JFR) pour repérer les pauses longues ou fréquentes avant de modifier une quelconque option.

Conteneurs et CPU

Dans les conteneurs, la JVM lit les limites des groupes de contrôle. Par défaut, elle utilise une fraction de la limite mémoire pour le tas.

  • -XX:MaxRAMPercentage=75.0 définit le tas comme un pourcentage de la mémoire du conteneur.
  • -XX:ActiveProcessorCount=N remplace le nombre de CPU détectés.

Cela évite de surallouer la mémoire, ce qui entraînerait ensuite l’arrêt du processus par l’orchestrateur.

Indicateurs JIT et de diagnostic

Voici quelques indicateurs supplémentaires utiles :

  • -XX:+HeapDumpOnOutOfMemoryError — effectue une capture du tas en cas d'OOM pour une analyse post-mortem.
  • -XX:HeapDumpPath=/tmp — indique où l'écrire.
  • -XX:+PrintCompilation — permet d'observer l'activité de compilation JIT.

Ils coûtent peu et s'avèrent précieux lorsque quelque chose ne fonctionne pas.

Discipline de réglage

Règles d'or pour les indicateurs :

  • Ne modifiez qu'un seul indicateur à la fois et mesurez à nouveau les résultats par rapport à une référence.
  • Ne copiez pas aveuglément des indicateurs trouvés dans des articles de blog — ils peuvent viser une ancienne JVM.
  • La plupart des applications n'ont besoin que de -Xmx et éventuellement d'un choix de collecteur ; les valeurs par défaut sont bonnes.

Métaspace et fils d'exécution

Le tas n'est pas la seule zone mémoire :

  • -XX:MaxMetaspaceSize limite l'espace réservé aux métadonnées de classe ; sans cette limite, une fuite lors du chargement des classes peut épuiser la mémoire native.
  • -Xss définit la taille de la pile de chaque fil d'exécution ; réduisez-la si vous exécutez un très grand nombre de fils, et augmentez-la en cas de récursion profonde.

Ces indicateurs nécessitent rarement un réglage, mais savoir qu'ils existent est utile lorsque le problème concerne la mémoire native plutôt que le tas.

Vérification rapide

Que contrôlent les indicateurs -Xms et -Xmx ?

Récapitulatif

Les indicateurs qu'il est utile de connaître :

  • -Xms / -Xmx définissent les limites du tas.
  • Choisissez un collecteur : G1 (par défaut), ZGC (faibles pauses), Parallel (débit).
  • Définissez -XX:MaxGCPauseMillis pour G1 ; activez -Xlog:gc* pour observer son activité.
  • Utilisez MaxRAMPercentage dans les conteneurs et HeapDumpOnOutOfMemoryError par mesure de sécurité.
  • Modifiez un seul indicateur à la fois et mesurez les résultats.

Questions Fréquemment Posées

La leçon « Options courantes de réglage de la JVM » est-elle gratuite ?

Oui — le texte complet de « Options courantes de réglage de la JVM » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours Java Academy, passe à CoddyKit PRO. Le cours Java Academy comprend 4 leçons au total.

Qu'est-ce que j'apprendrai dans « Options courantes de réglage de la JVM » ?

Options du tas, du GC et du JIT Tu pratiques Java Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.

Dois-je avoir de l'expérience pour commencer Java Academy ?

Aucune expérience préalable n'est requise. Java Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 4 sur 4.

Combien de temps prend la leçon « Options courantes de réglage de la JVM » ?

La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.

Peux-tu écrire et exécuter du code dans cette leçon Java Academy ?

Oui. Chaque leçon Java Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.

Toutes les leçons de ce cours

  1. Identifier les goulots d’étranglement
  2. Java Flight Recorder
  3. Analyser avec JDK Mission Control
  4. Options courantes de réglage de la JVM
← Retour à Java Academy