2

我有一个设置,其中有两个 Cocoa 进程,与分布式对象 (DO) 通信。客户端正在使用垃圾收集,服务器没有。

似乎客户在我对它们的直接引用之外挂在遥远的对象上。这意味着即使在我没有对这些对象的引用之后,它们也会在 NSDistantObjectTableEntry 拥有的周围徘徊。显然,它们不会在服务器上被释放。

只有当客户端退出时,它才会放开所有远处的对象。手动断开连接可能也可以,但我不想在客户端运行时这样做。

有没有办法告诉 GC'd DO 客户端放弃不再在本地引用的远程对象?

4

1 回答 1

1

可能存在跨越客户端和服务器的保留周期——即客户端对象保留服务器对象的代理,而服务器对象又保留客户端对象的代理。

这是保留循环的一个非常简单的示例,当涉及两个以上的对象时,诊断变得更加复杂。

有关其他 DO 相关问题的示例,请参阅分布式对象的微妙危险。

于 2010-07-11T15:54:08.903 回答