Comprendre l'architecture mémoire de la JVM

Optimiser son code en Java

Pavlos Kosmetatos

Lead Engineer @Wealthyhood

Qu'est-ce que la JVM ?

  • Environnement d'exécution indépendant de la plateforme
  • Convertit le bytecode (.class) en code machine
  • Gestion de la mémoire et ramasse-miettes
  • Compilation Just-In-Time
Optimiser son code en Java

Aperçu de l'architecture mémoire de la JVM

L'architecture mémoire de la JVM

Optimiser son code en Java

Mémoire pile (Stack)

  • Zone mémoire pour l'exécution des méthodes et variables locales
  • Structure LIFO (Last-In-First-Out)
  • Stocke :
    • Variables locales
    • Types primitifs
    • Informations d'appel de méthode
  • StackOverflowError si la taille est dépassée
Optimiser son code en Java

Mémoire tas (Heap)

  • Stocke tous les objets et tableaux
  • new crée un objet et l'alloue dans le tas
  • Gérée par le ramasse-miettes
  • Taille dynamique
  • Découpée en générations
Optimiser son code en Java

La mémoire en action

public void processData() {
    int count = 0;                  // Stack

String name = "Java"; // Heap
List<String> items = // Reference on Stack new ArrayList<>(); // Object on Heap
items.add(new String("Item")); // Object on Heap }
Optimiser son code en Java

Modèles de code sobres en mémoire

// Inefficient
List<String> list1 = new ArrayList<>();
for (int i = 0; i < 1000; i++) {
    String s = new String("value"); // 1000 objects
    list1.add(s);
}

// Better
List<String> list2 = new ArrayList<>();
String s = "value";  // Single object
for (int i = 0; i < 1000; i++) {
    list2.add(s);
}
Optimiser son code en Java

En résumé

  • La JVM gère la mémoire via (surtout) la pile et le tas
  • Mémoire pile → rapide, stocke primitifs et références
  • Mémoire tas → stocke les objets
Optimiser son code en Java

Passons à la pratique !

Optimiser son code en Java

Preparing Video For Download...