Ramasse-miettes temps-réel

Les algorithmes présentés dans les sections précédentes provoquent une pause de l'exécution de l'application durant le ramassage. Pour la plupart des applications cette pause, souvent relativement brève (inférieure à une seconde), ne pose aucun problème. L'utilisation d'un ramasse-miettes générationnel diminue la durée de la pause sans la faire disparaître.

Pour certaines applications, même une pause très brève peut créer des problèmes. Ce sont des applications de type temps-réel. Ces applications ont des exigences de délai extrêmes. C'est le cas en particulier des systèmes de pilotage d'usines ou d'appareils dont la réponse ne peut pas attendre.

Pour d'autres applications, la pause n'est pas catastrophique, mais peut quand même nuire à l'appréciation de celle-ci. C'est le cas d'applications de type multimédia avec un traitement d'images animées ou de sons.

Pour ces applications, il existe des ramasse-miettes temps-réels. Ce type de ramasse-miettes s'exécute en parallèle (ou en quasi-parallèle) avec l'application. Essentiellement, le traçage des objets vivants est effectué en parallèle avec l'exécution normale du programme. Ce n'est pas sans complication, car l'exécution de l'application peut modifier l'accessibilité à un objet. Le travail du ramasse-miettes est donc parfois à refaire, du moins partiellement.

Les systèmes Common Lisp commerciaux ont une version avec ramasse-miettes temps-réel, mais la version normale n'en a pas. Aucun système Common Lisp librement distribuable ne contient actuellement (septembre 2003) un tel ramasse-miettes.

Irene DURAND
2011-10-14