Collecte des déchets (GC) et compilation Just-In-Time (JIT)

Optimiser son code en Java

Pavlos Kosmetatos

Lead Engineer @Wealthyhood

Garbage collection : les bases

Gestion manuelle de la mémoire (C/C++)

  • Le programmeur alloue et libère la mémoire explicitement
  • Risque de fuites

$$

Garbage Collection en Java

  • Allocation mémoire automatique
  • Détection automatique des objets inutilisés
  • Récupération automatique de la mémoire
Optimiser son code en Java

Fonctionnement de la garbage collection

  • Marquage : identifier les objets accessibles depuis les racines
  • Balayage : supprimer les objets inaccessibles

Capture d'écran du 11/05/2025 à 18:58:38.png

Optimiser son code en Java

Garbage collection et performance

Compromis de performance de la GC

  • Simplifie le développement, avec des impacts potentiels sur les performances

$$

Algorithmes de GC

  • Les JVM modernes proposent plusieurs algorithmes de collecte
  • Le choix dépend des besoins de l'application
  • Un guide détaillé sur les algorithmes de GC est disponible ici
1 https://www.baeldung.com/jvm-garbage-collectors
Optimiser son code en Java

Impact de la GC sur les performances

// À éviter : créer de nombreux objets de courte durée de vie
for (int i = 0; i < 1000000; i++) {
    new Object(); // Devient immédiatement un déchet
}


// Mieux : réutiliser des objets Object obj; for (int i = 0; i < 1000000; i++) { obj = new Object(); // Une seule référence }
Optimiser son code en Java

Coder en faveur de la GC

// À éviter dans du code critique en performance
String result = "";
for (int i = 0; i < 100000; i++) {
    result += i; // Crée une nouvelle String à chaque fois
}


// Approche recommandée StringBuilder builder = new StringBuilder(); for (int i = 0; i < 100000; i++) { builder.append(i); // Réutilise le même tampon } String result = builder.toString();
Optimiser son code en Java

Compilation Just-In-Time

  • Processus d'exécution de la JVM :
    • Code source Java -> Bytecode
    • Bytecode -> Exécution interprétée
    • Méthodes « chaudes » -> Code machine natif
  • Optimise le code fréquemment exécuté
Optimiser son code en Java

Bonnes pratiques pour le JIT

  • Écrire un code prévisible
// Des branches prévisibles aident l'optimisation JIT
if (value > 0) {
    // Code A - chemin souvent emprunté
} else {
    // Code B - chemin rarement emprunté
}
  • Créer des méthodes ciblées et courtes
  • Les petites méthodes fréquemment appelées sont idéales pour l'inlining
  • Un code trop complexe est moins bien optimisé
Optimiser son code en Java

Récapitulatif

  • Minimiser la création d'objets sur les chemins critiques en performance
  • Écrire un code prévisible, aligné avec les capacités d'optimisation du JIT
  • Cibler l'optimisation sur le code qui compte, après profilage
Optimiser son code en Java

Passons à la pratique !

Optimiser son code en Java

Preparing Video For Download...