Обеспечение уничтожения объекта Java - PullRequest
3 голосов
/ 09 марта 2012

Ситуация немного сложная. У меня есть веб-контейнер, который управляет другим приложением на другом компьютере, используя RMI. На стороне сервера RMI есть HashMap, который содержит информацию о пользователе, которой должна управлять сторона веб-приложения.

Когда пользователь выходит из системы со стороны веб-приложения, происходит RMI-вызов к серверу RMI, сообщающий серверу о выходе пользователя из системы. Затем я просто удаляю элемент в HashMap.

Теперь я понимаю, что GC не будет собирать объект, который я удалил в HashMap, потому что, возможно, другой поток все еще использует его, и объект также содержит некоторые подобъекты, такие как пользовательские контакты.

Я действительно понятия не имею, как уничтожить весь объект, включая его свойства и свойства свойств.

Ответы [ 2 ]

3 голосов
/ 09 марта 2012

Если это случай распределенной сборки мусора (т. Е. Клиент имеет удаленную ссылку на объект, который существует на сервере), эта система работает, когда сервер отслеживает, какие клиенты запросили доступ к удаленным объектам, работающим насервер.Когда ссылка сделана, сервер помечает объект как «грязный», а когда клиент удаляет ссылку, он помечается как «чистый».

В этих случаях, если клиент регулярно не уведомляет сервер о том, что объекты все еще используются, сервер должен автоматически собирать мусор через определенный промежуток времени.

3 голосов
/ 09 марта 2012

Ну, вам нужно удалить все жесткие ссылки на ваш объект, чтобы он был пригоден для сбора мусора. Другого выхода нет. Что такое другая нить в вашем случае?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...