Garbage Collector ou Garbage Collection : récupération de déchets,
"ramasse-miettes".
Besoin
Libérer automatiquement la mémoire allouée inutilisée.
Conception
Le GC est intégré à la JVM. Il s'exécute dans un thread dédié, exécuté de temps en temps.
Plusieurs conceptions sont possibles :
- (stop the world) : l'unique thread du GC
- stoppe tous les threads applicatifs le temps de son travail.
- ne sait travailler que sur 1 CPU
- génerationnelle (generational) : chaque objet a un âge qui le détermine sa
place dans un espace de génération. La taille de chaque espace générationnel dans le tas (heap) détermine
avec quel fréquence il sera rempli et nettoyé par le GC
- à la jeune génération (young generation) est allouée une portion réduite
du tas, plus rapidement remplie et donc fréquemment libérée par le GC. Y sont placés les objets alloués
récemment (souvent les 2/3 des objets d'une application) dont la libération fréquente impliquera de nombreuses
pauses mais sera rentable quant à la quantité de mémoire libérée.
- paradis (eden) :
- espaces de survivants (survivor spaces) :
- à l'ancienne génération (old generation) est allouée une plus grande portion du tas où sont
placés les objets restés trop longtemps en jeune génération. Leur espace se rempli moins vite et le GC les
examine donc moins souvent. Cependant le moment venu leur libération prendra plus de temps.
Défauts
- Dans certains GC, l'application est suspendue (quelques secondes, parfois plusieurs minutes dans des cas
extraordinaires) pendant le recyclage de la mémoire.
Exemples
GC de JVM (O)ui, (N)on, (D)eprecated |
|
Version |
Java |
Commentaire |
|
Release |
1 |
|
Fix |
0 |
1 |
2 |
3 |
4 |
Domaine |
Technologie |
|
Maintenance |
2 |
|
|
|
0 |
1 |
|
|
Collector |
Young |
|
|
|
Copying |
Parallel |
|
|
|
|
Old |
|
|
|
MC |
CMS |
|
Threads GC |
|
|
|
1 |
|
|
|
|
|
|
|
Arrêt application |
|
|
|
Oui |
|
|
|
|
|
|
Stop the world |
Multiple CPU |
|
|
|
Non |
|
|
|
|
|
|
|
Algorithme |
|
|
|
|
|
|
|
|
|
|
Générationnel |
Collector young |
Parallel |
Non |
|
Optionnel |
|
Copying |
Non |
|
Oui |
|
Collector old |
CMS |
Non |
|
Oui |
|
Optionnel |
Concurrent Mark Sweep |
Mark-Compact |
Non |
|
Oui |
|
|
Tas |
|
|
|
|
|
|
|
|
|
|
|
|
> 4 Go |
|
|
|
|
|
Oui |
JVM 64 bits |