Я разрабатываю распределенную систему, которая должна поддерживать граф распределенных объектов, где объекты могут указывать на другие объекты, некоторые из которых могут находиться на удаленных компьютерах. Также должна быть возможность перемещать объекты с одного компьютера на другой.
Это поднимает две связанные проблемы:
- Как мы узнаем, когда безопасно собирать мусор?
- Если мы перемещаем объект, как мы можем надежно убедиться, что все ссылки на него обновлены?
Первоначально предполагалось вести исчерпывающий список всех входящих ссылок.
Конечно, одного этого недостаточно для сборки мусора, поскольку он не будет перехватывать циклические ссылки (та же проблема, что и при сборке мусора с подсчетом ссылок).
Однако этот список можно использовать для того, чтобы любой удаленный компьютер со ссылками на объект мог быть уведомлен о перемещении объекта.
Другая мысль состоит в том, что если объект перемещается, он оставляет «крошку» на своем первоначальном компьютере. Если компьютер получает сообщение, предназначенное для объекта, которого больше нет, его можно переслать на новое место.
Однако невозможно сохранять такие ссылки бесконечно, как мы узнаем, когда их безопасно удалить?
Может ли кто-нибудь предоставить указатели на существующие решения этой проблемы, особенно те, которые также занимаются вопросами репликации и параллелизма?