Chapitre 1
Etat de l’art
La gestion de la mémoire dynamique est depuis toujours un problème important
dans l’implémentation des langages de programmation. La problématique est double :
faut-il laisser la charge de cette gestion au programmeur? Cette solution est une source
d’erreur importante, et conduit à un processus de développement difficile. Faut-il la
gérer automatiquement? On fait alors face aux performances non prédictibles des al-
gorithmes de GC.
Nous nous attacherons plus particulièrement à deux aspects pertinents pour les pro-
grammes Java temps-réel : la gestion de la mémoire en régions, qui permet de garantir
le respect de certaines contraintes temporelles mais qui est d’usage complexe pour le
programmeur, puis nous verrons comment automatiser son utilisation, en particulier
par analyse d’échappement, qui vise à obtenir une gestion automatique de la mémoire
dynamique grâce à l’anayse statique du programme.
1.1 La mémoire dynamique
Un programme, lorsqu’il s’exécute, a besoin de mémoire pour stocker les données
qu’il manipule. On distingue trois catégories de mémoire : la mémoire globale, de
taille fixe, où sont situées les variables globales, la pile, qui sert à stocker les frames
d’appel des fonctions, et le tas, dans lequel on alloue la mémoire dynamique.
1.1.1 La gestion de la mémoire dynamique
L’espace du tas n’est pas utilisé de la même manière suivant les langages : C offre
pour le manipuler les deux primitives malloc() et free(), C++ les opérateurs new
et delete. Le programmeur demande au système la mémoire dont il a besoin, et la
libère explicitement ensuite.
Le langage Java, quant à lui, permet au programmeur de s’affranchir complètement
de la gestion manuelle de la mémoire dynamique, une des sources les plus courantes
d’erreur pour un programmeur, et qui devient très problématique sur les gros projets
impliquant de nombreux développeurs. En Java, le programmeur ne peut pas demander
à désallouer de mémoire. C’est le rôle du ramasse-miettes (ou garbage collector, GC)
de déterminer si une zone peut être réutilisée ou pas.
5