0Pricing
Java Academy · Leçon

Régions du tas de la JVM et cycle de vie des objets

Explorez la jeune génération (Eden, Survivor), l’ancienne génération et Metaspace, ainsi que le déplacement des objets entre ces régions.

Régions du tas de la JVM et cycle de vie des objets est une leçon Java Academy gratuite sur CoddyKit. Ceci est la leçon 1 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.

Le modèle de mémoire de la JVM

La JVM divise la mémoire en plusieurs zones. Le tas contient toutes les instances de classes et tous les tableaux. Les zones hors tas comprennent Metaspace, qui contient les métadonnées des classes, les cadres de pile et la mémoire native.

Génération jeune : espace Eden

Les objets nouvellement alloués vont dans Eden. Lorsque Eden est plein, une collecte mineure s’exécute. Les objets survivants sont copiés dans un espace de survie.

// Object allocation starts in Eden:
String s = new String("hello");  // allocated in Eden
List<Integer> list = new ArrayList<>();  // also Eden

Espaces de survie : S0 et S1

Deux espaces de survie, S0 et S1, contiennent les objets qui ont survécu à au moins une collecte. À chaque collecte mineure, les objets alternent entre S0 et S1. Leur compteur d’âge est incrémenté.

Seuil de vieillissement

Lorsque l’âge d’un objet dépasse le seuil de vieillissement, fixé par défaut à 15, il est promu dans l’ancienne génération. Les objets volumineux peuvent éviter la génération jeune et aller directement dans l’ancienne génération.

// JVM flags:
// -XX:MaxTenuringThreshold=15  (default)
// -XX:PretenureSizeThreshold=1m  (objects > 1MB go directly to Old Gen)

Ancienne génération (espace des objets âgés)

Les objets à longue durée de vie résident dans l’ancienne génération. Les collectes majeures, ou complètes, récupèrent l’ancienne génération et sont plus coûteuses. Réduire le nombre d’objets à longue durée de vie diminue la fréquence des collectes complètes.

Metaspace (Java 8 et versions ultérieures)

Metaspace a remplacé PermGen dans Java 8. Il contient les métadonnées des classes, le bytecode des méthodes et les chaînes internées. Il utilise la mémoire native et s’agrandit dynamiquement, dans la limite définie par -XX:MaxMetaspaceSize.

// Flag examples:
// -XX:MetaspaceSize=64m        (initial Metaspace size)
// -XX:MaxMetaspaceSize=256m   (cap to avoid native OOM)

Chemin rapide d’allocation des objets

La JVM utilise des tampons d’allocation locaux aux fils d’exécution pour allouer de la mémoire dans Eden sans synchronisation. Chaque fil d’exécution possède sa propre petite portion d’Eden.

Cycle de vie d’un objet : accessibilité

Un objet est vivant s’il est accessible depuis une racine de collecte, comme une variable de pile, un champ statique ou une référence JNI. Les objets inaccessibles peuvent être récupérés.

Object a = new Object(); // reachable via local variable
a = null;                 // now unreachable — eligible for GC

Références SoftReference, WeakReference et PhantomReference

SoftReference est effacée avant une erreur OOM et sert notamment aux caches. WeakReference est effacée lors de la prochaine collecte. PhantomReference sert au nettoyage postérieur à la destruction de l’objet.

Cache<String, Image> cache = new LinkedHashMap<>();
// Use SoftReference to let GC reclaim cache under memory pressure:
SoftReference<Image> ref = new SoftReference<>(loadHeavyImage());
Image img = ref.get(); // null if GC collected it

Finalisation des objets (à éviter)

finalize() est obsolète et imprévisible : la collecte l’appelle avant de récupérer l’objet, mais le moment exact n’est pas garanti. Utilisez Cleaner (Java 9 et versions ultérieures) ou un bloc de gestion automatique des ressources.

Options de dimensionnement du tas

Contrôlez la taille du tas avec -Xms, la taille initiale, et -Xmx, la taille maximale. En production, définissez-les à la même valeur pour éviter les pauses dues au redimensionnement du tas.

// Recommended production flags:
// -Xms512m -Xmx512m   (fix heap to 512 MB)
// -XX:NewRatio=2       (Old:Young = 2:1)

Vérification rapide

Où un objet nouvellement alloué se trouve-t-il d’abord dans le tas de la JVM ?

Récapitulatif

Le tas de la JVM comprend la génération jeune, avec Eden et les espaces de survie, ainsi que l’ancienne génération. Les objets vieillissent au fil des collectes mineures avant d’être promus. Metaspace contient les métadonnées des classes. Contrôlez ces zones avec -Xms/-Xmx et les options de réglage.

Questions Fréquemment Posées

La leçon « Régions du tas de la JVM et cycle de vie des objets » est-elle gratuite ?

Oui — le texte complet de « Régions du tas de la JVM et cycle de vie des objets » 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 « Régions du tas de la JVM et cycle de vie des objets » ?

Explorez la jeune génération (Eden, Survivor), l’ancienne génération et Metaspace, ainsi que le déplacement des objets entre ces régions. 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 1 sur 4.

Combien de temps prend la leçon « Régions du tas de la JVM et cycle de vie des objets » ?

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. Régions du tas de la JVM et cycle de vie des objets
  2. Algorithmes de GC : Serial, G1, ZGC, Shenandoah
  3. Détecter et corriger les fuites mémoire
  4. Options de réglage du GC et profilage avec JVisualVM
← Retour à Java Academy