Ramasse-miettes générationnels

La recherche en programmation indique qu'un grand nombre d'applications ont un comportement particulier en ce qui concerne l'utilisation des objets alloués. En fait, soit un objet alloué devient presque immédiatement inaccessible (ce sont des objets temporaires), soit il reste accessible très longtemps.

Ce fait est exploité dans les ramasse-miettes générationnels. Les objets de l'application sont partagés en générations selon une approximation du temps écoulé depuis leur allocation. Le nombre de ces générations est souvent compris entre 2 et 10.

Les plus jeunes générations sont parcourues fréquemment dans l'espoir de récupérer des objets jeunes inaccessibles. Un algorithme copiant est idéal pour ces générations, car il est plus rapide lorsque le nombre d'objets à récupérer est relativement important. De plus, la mémoire supplémentaire requise est un multiple de la taille de ces générations seulement et non de l'ensemble des objets vivants.

Les plus vieilles générations sont parcourues plus rarement, car il est peu probable de pouvoir récupérer des objets dans ces générations. Un algorithme de type marquage et balayage est plus avantageux pour ces générations, car la taille totale de la mémoire à parcourir est environ la même que celle des objets vivants dans ces générations. De plus, il utilise peu de mémoire supplémentaire.

La plupart des implémentations modernes de langages avec gestion automatique de la mémoire utilisent un ramasse-miettes générationnel.

Irene DURAND
2011-10-14