Description de la récupération de place (distributed garbage collection)

Le sous-système RMI implémente la récupération de place répartie (Distributed Garbage Collection) en fonction du nombre de référence pour fournir des fonctions automatiques de gestion de la mémoire pour les objets serveur distants.

Lorsque le client crée (désérialise) une référence distante, il appelle dirty() sur la récupération DGC sur le serveur. Une fois que le client a terminé avec la référence distante, il appelle la méthode clean() correspondante.

Une référence à un objet distant est louée pendant une période par le client qui détient la référence. La période de bail commence lorsque l'appel dirty() est reçu. Le client doit renouveler les baux en effectuant des appels dirty() supplémentaires sur les références distantes qu'il détient avant que le bail expire. Si le client ne renouvelle pas le bail avant qu'elle expire, le récupérateur de place DGC suppose que l'objet distant n'est plus référencé par le client.

DGCClient implémente le côté client du système de récupération DGC RMI. L'interface externe avec le client DGCClient est la méthode registerRefs(). Lorsqu'une référence LiveRef à un objet distant entre dans la JVM, elle doit être enregistrée dans le client DGCClient pour participer à la récupération de place DGC. Lorsque la première référence LiveRef d'un objet distant est enregistrée, un appel dirty() est exécuté vers le récupérateur DGC sur le serveur pour l'objet distant. L'appel retourne un bail pour que le récupérateur DGC côté serveur ne collecte pas l'objet distant pendant un certain temps. Lorsque des instances de référence LiveRef à des objets distants existent sur un serveur, le client DGCClient envoie régulièrement d'autres appels dirty pour renouveler son bail. Le client DGCClient recherche la disponibilité locale des instances de référence LiveRef enregistrées en utilisant des références phantom. Lorsque l'espace d'une instance de référence LiveRef d'un objet distant est récupéré localement, un appel clean() est émis vers le récupérateur DGC sur le serveur. L'appel indique que le serveur n'a pas besoin de maintenir actif l'objet distant pour le client. L'unité d'exécution RenewCleanThread gère l'activité DGC client asynchrone en renouvelant les baux et en exécutant des appels clean. Par conséquent, cette unité d'exécution attend le renouvellement de bail suivant ou la mise en file d'attente d'une référence phantom pour générer des demandes de nettoyage appropriées.