Collecte des ordures (GC) et compilation Just-In-Time (JIT)

Optimiser le code en Java

Pavlos Kosmetatos

Lead Engineer @Wealthyhood

Collecte des ordures – notions de base

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

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

$$

Collecte des ordures de Java

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

Fonctionnement de la collecte des ordures

  • Marquer : repérer les objets accessibles depuis les racines
  • Balayer : supprimer les objets inaccessibles

Screenshot 2025-05-11 at 6.58.38 PM.png

Optimiser le code en Java

Collecte des ordures et performance

Compromis de performance du GC

  • Simplifie le développement, avec des impacts possibles sur la performance

$$

Algorithmes de GC

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

Impact du GC sur la performance

// À éviter : créer de nombreux objets de courte durée
for (int i = 0; i < 1000000; i++) {
    new Object(); // Devient aussitôt 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 le code en Java

Coder en faveur du GC

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


// Meilleure approche 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 le 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 exécuté fréquemment
Optimiser le code en Java

Patrons de code favorables au JIT

  • Écrire du code prévisible
// Des embranchements 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 le code en Java

En résumé

  • Minimiser la création d'objets dans les parcours critiques de performance
  • Écrire du code prévisible aligné sur les capacités d'optimisation du JIT
  • Cibler l'optimisation sur l'essentiel en profilant d'abord
Optimiser le code en Java

Passons à la pratique !

Optimiser le code en Java

Preparing Video For Download...