Gestion mémoire de la JVM

Garbage Collecting

Informations générales

Comme chacun sait, Java possède une machine virtuel qui a l'avantage de ne pas avoir à gérer la mémoire soit même comme c'est par exemple le cas en C (par l'intermédiaire des fonctions malloc et free).

Les objectifs de la JVM sont en fait double :

Quelques mots de vocabulaire :
  • Un objet collecté est un objet qui n'est plus référencé et qui est donc prêt à être supprimé.
  • Le ramasse-miette est le second nom du Garbage Collector (ou GC).

Fonctionnement générale

La JVM gère deux types d'objets en mémoire :

Pour chacune de ces zones, il existe plusieurs algorithmes de collection que l'on peut soit sélectionner, soit laisser au choix de la JVM.

Le déclenchement de la collecte se fait lorsque la mémoire est pleine (il s'agit plus exactement d'un seuil, 80% de la mémoire disponible par exemple). Lorsque la zone jeune est pleine, l'opération nommée GC (pour Garbage Collecting) se charge de nettoyer cette zone uniquement. Mais lorsque la zone vieille est pleine, l'opération se nomme alors Full GC et se charge de nettoyer l'ensemble des zones.

Il est important de noter que lors d'une opération de collecte mémoire, l'ensemble des threads de la JVM est coupé.

Cette période d'arrêt est nommée "Stop-the-World pause".