Академический Документы
Профессиональный Документы
Культура Документы
dans le cas d'une application distribue. Pour une application non distribue, le
garbage collector de Java dtruit tous les objets non rfrencs. Au lancement
d'un programme Java, un ensemble de rfrences racines est dfini. A un instant
donn, un objet accessible depuis une rfrence racine est considr en vie, un
objet non accessible depuis une rfrence racine est considr mort et prt
tre rclam par le garbage collector.
Dans le cas de RMI les choses se compliquent quelque peut. Lorsqu'un objet
Remote est instanci, il peut tre rfrenc directement en local mais il peut
aussi tre indirectement rfrenc par des Stub distants. Par exemple, dans
l'exemple du chat serveur l'objet RemoteConnectionImpl n'est pas directement
rfrenc dans la JVM du serveur o il existe mais il est utilis par le Stub qui a
t envoy au client.
La solution adopte dans RMI est que le runtime RMI garde une rfrence sur
l'objet remote pendant une certaine dure appele lease. A chaque
communication avec l'objet distant le dcompte de temps de lease est remis
zro. S'il n'y a pas de communication c'est la charge du client de renouveler le
lease par un appel distant. Si le client ne renouvelle pas ce lease, le DGC le
considre comme mort.
Pour chaque objet Remote, RMI garde un compteur pour connatre combien de
clients actifs possdent un Stub sur l'objet. Quand le lease d'un client expire et
n'est pas renouvel, le compteur est decrmente. Quand il est zro, l'objet peut
tre rclam par le garbage collector.
Notez bien qu'il n'y a rien a faire pour que le DGC de RMI fonctionne. Le but de
cette section est uniquement de montrer que le DGC est bien actif dans une
application RMI donne.