G. C.
Garbage Collector ou Garbage Collection : récupération
de déchets.
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 |
Voir