Entendendo Distributed Garbage Collection

O subsistema da RMI implementa contagem de referência baseada em Distributed Garbage Collection (DGC) para fornecer recursos automáticos de gerenciamento de memória para objetos do servidor remoto.

Quando o cliente cria (desserializa) uma referência remota, ele chama dirty() na DGC do servidor. Após a conclusão com a referência remota, o cliente chama o método clean() correspondente.

Uma referência a um objeto remoto tem lease por um período de tempo pelo cliente que mantém essa referência. O período de lease inicia quando a chamada dirty() é recebida. O cliente precisa renovar os leases fazendo chamadas dirty() nas referências remotas que ele hospeda antes que esses leases expirem. Se o cliente não renovar o lease antes de expirar, o coletor de lixo distribuído supõe que o objeto remoto não seja mais referido por esse cliente.

DGCClient implementa o lado do cliente do sistema distributed garbage collection da RMI. A interface externa para DGCClient é o método registerRefs(). Quando um LiveRef para um objeto remoto entra na JVM, deve ser registrado com DGCClient para participar em distributed garbage collection. Quando o primeiro LiveRef de um objeto remoto específico é registrado, uma chamada dirty() é feita para a DGC do servidor do objeto remoto. A chamada retorna um lease garantindo que a DGC do servidor não coletará o objeto remoto por um determinado período de tempo. Enquanto instâncias LiveRef para objetos remotos em um servidor específico existem, DGCClient periodicamente envia mais chamadas dirty para renovar seu lease. DGCClient controla a disponibilidade local de instâncias LiveRef registradas usando referências fantasmas. Quando o primeiro LiveRef de um objeto remoto específico é coletado como lixo localmente, uma chamada clean() é feita para a DGC do servidor. A chamada indica que o servidor não precisa manter o objeto remoto ativo para esse cliente. RenewCleanThread trata da atividade assíncrona de DGC do lado do cliente, renovando os leases e fazendo chamadas clean. Portanto, esse encadeamento aguarda até a próxima renovação de lease ou até qualquer referência fantasma ser enfileirada para gerar pedidos limpos, conforme necessário.