Cocoa Distributed Objects, клиент GC, сервер без GC

У меня есть установка, в которой есть два процесса Cocoa, взаимодействующие с распределенными объектами (DO). Клиент использует сборку мусора, сервер — нет.

Кажется, что клиент цепляется за удаленные объекты вне моих прямых ссылок на них. Это означает, что даже после того, как у меня нет ссылок на объекты, они висят вокруг, принадлежащие NSDistantObjectTableEntry. Очевидно, что они не освобождаются на сервере.

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

Есть ли способ сказать клиенту GC'd DO отпустить удаленные объекты, на которые больше не ссылаются локально?


person Community    schedule 14.10.2008    source источник
comment
Является ли клиент приложением или инструментом командной строки?   -  person Chris Hanson    schedule 15.10.2008
comment
Интересно, что сегодня я обнаружил очень похожую проблему, только в моем случае ни одна из сторон не использует сборщик мусора (я отключил его, чтобы убедиться, что это не было причиной ошибки). Оформить заказ на мой вопрос (stackoverflow.com/questions/2521514/) и пример, который я разместил там. Как вы говорите, разрыв соединения вручную работает, но это не кажется правильным. Так есть ли что-то, что мы принципиально упускаем из того, как работает DO?   -  person jkp    schedule 26.03.2010


Ответы (1)


Может существовать цикл сохранения, который охватывает клиента и сервер, т. е. клиентский объект сохраняет прокси объекта сервера, который, в свою очередь, сохраняет прокси объекта клиента.

Это очень простой пример цикла сохранения, когда задействовано более двух объектов, диагностировать его становится сложнее.

См. Неявные опасности распределенных Объекты, например, другие подводные камни, связанные с DO.

person Nick Dowell    schedule 11.07.2010