Spec-Zone .ru
спецификации, руководства, описания, API
СОДЕРЖАНИЕ | ПРЕДЫДУЩИЙ | NEXT Java Удаленный Вызов метода


3.3 Сборка "мусора" Удаленных объектов

В распределенной системе, так же, как в локальной системе, это является требуемым, чтобы автоматически удалить те удаленные объекты, на которые больше не ссылается никакой клиент. Это освобождает программиста от необходимости отследить клиенты удаленных объектов так, чтобы она могла завершиться соответственно. RMI использует алгоритм сборки "мусора" подсчета ссылок, подобный Сетевым Объектам Modula-3. (См. "Сетевые Объекты" Birrell, Нельсоном, и Owicki, Системным Техническим отчетом 115, 1994 Исследовательского центра Digital Equipment Corporation.)

Чтобы выполнить сборку "мусора" подсчета ссылок, время выполнения RMI отслеживает все живые ссылки в пределах каждой виртуальной машины Java. Когда живая ссылка вводит виртуальную машину Java, ее подсчет ссылок постепенно увеличивается. Первая ссылка на объект отправляет сообщение, на которое "ссылаются", серверу для объекта. Поскольку на живые ссылки, как находят, нессылаются в локальной виртуальной машине, количество постепенно уменьшается. Когда последняя ссылка была отброшена, сообщение, на которое нессылаются, отправляется серверу. Много тонкости существуют в протоколе; большинство из них связывается с поддержанием упорядочивания на которые ссылаются и сообщений, на которые нессылаются, чтобы гарантировать, что объект преждевременно не собирается.

Когда на удаленный объект не ссылается никакой клиент, время выполнения RMI обращается к нему использующий слабую ссылку. Слабая ссылка позволяет сборщику "мусора" виртуальной машины Java отбрасывать объект, если никакие другие локальные ссылки на объект не существуют. Распределенный алгоритм сборки "мусора" взаимодействует со сборщиком "мусора" локальной виртуальной машины Java обычными способами, содержа нормальные или слабые ссылки на объекты.

Пока локальная ссылка на удаленный объект существует, она не может быть собрана "мусор", и ее можно передать в удаленных вызовах или возвращена клиентам. Передача удаленного объекта добавляет идентификатор для виртуальной машины, к которой это передали к набору, на который ссылаются. Удаленный объект, нуждающийся в уведомлении, на которое нессылаются, должен реализовать java.rmi.server.Unreferenced интерфейс. Когда те ссылки больше не существуют, unreferenced метод будет вызван. unreferenced вызывается, когда набор ссылок, как находят, пуст, таким образом, его можно было бы вызвать не раз. Удаленные объекты только собираются, когда больше ссылок, или локальных или удаленных, все еще не существует.

Отметьте, что, если сетевой раздел существует между клиентом и объектом удаленного сервера, возможно, что преждевременный набор удаленного объекта произойдет (так как транспорт мог бы полагать что разрушенный клиент). Из-за возможности преждевременного набора удаленные ссылки не могут гарантировать ссылочную целостность; другими словами всегда возможно, что удаленная ссылка, возможно, не фактически обращается к существующему объекту. Попытка использовать такую ссылку генерирует a RemoteException который должен быть обработан приложением.



СОДЕРЖАНИЕ | ПРЕДЫДУЩИЙ | NEXT
Copyright 1997, 2010, Oracle и/или его филиалы. Все права защищены.