我有一个设置,其中有两个 Cocoa 进程,与分布式对象 (DO) 通信。客户端正在使用垃圾收集,服务器没有。
似乎客户在我对它们的直接引用之外挂在遥远的对象上。这意味着即使在我没有对这些对象的引用之后,它们也会在 NSDistantObjectTableEntry 拥有的周围徘徊。显然,它们不会在服务器上被释放。
只有当客户端退出时,它才会放开所有远处的对象。手动断开连接可能也可以,但我不想在客户端运行时这样做。
有没有办法告诉 GC'd DO 客户端放弃不再在本地引用的远程对象?
我有一个设置,其中有两个 Cocoa 进程,与分布式对象 (DO) 通信。客户端正在使用垃圾收集,服务器没有。
似乎客户在我对它们的直接引用之外挂在遥远的对象上。这意味着即使在我没有对这些对象的引用之后,它们也会在 NSDistantObjectTableEntry 拥有的周围徘徊。显然,它们不会在服务器上被释放。
只有当客户端退出时,它才会放开所有远处的对象。手动断开连接可能也可以,但我不想在客户端运行时这样做。
有没有办法告诉 GC'd DO 客户端放弃不再在本地引用的远程对象?
可能存在跨越客户端和服务器的保留周期——即客户端对象保留服务器对象的代理,而服务器对象又保留客户端对象的代理。
这是保留循环的一个非常简单的示例,当涉及两个以上的对象时,诊断变得更加复杂。
有关其他 DO 相关问题的示例,请参阅分布式对象的微妙危险。