Comprendre l'architecture mémoire de la JVM

Optimiser le code en Java

Pavlos Kosmetatos

Lead Engineer @Wealthyhood

Qu'est-ce que la JVM ?

  • Environnement d'exécution multiplateforme
  • Convertit le bytecode (.class) en code machine
  • Gestion de la mémoire et récupération de mémoire
  • Compilation « Just-In-Time »
Optimiser le code en Java

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

Architecture mémoire de la JVM

Optimiser le code en Java

Mémoire pile (stack)

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

Mémoire tas (heap)

  • Contient tous les objets et les tableaux
  • new crée un objet et l'alloue dans le tas
  • Gérée par le récupérateur de mémoire
  • Taille dynamique
  • Découpée en générations
Optimiser le 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 le code en Java

Modèles de code économes 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 le code en Java

En résumé

  • La JVM gère la mémoire surtout via la pile et le tas
  • Pile : rapide, stocke primitives et références
  • Tas : stocke les objets
Optimiser le code en Java

Passons à la pratique !

Optimiser le code en Java

Preparing Video For Download...