Cocoa分布式对象、GC客户端、非GC服务器

标签 cocoa macos garbage-collection distributed-objects

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

看起来客户端除了我对它们的直接引用之外还保留着远处的对象。这意味着即使我没有对这些对象的引用,它们也会由 NSDistantObjectTableEntry 所拥有。显然它们不会在服务器上被释放。

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

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

最佳答案

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

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

参见The Subtle Dangers Of Distributed Objects例如其他与 DO 相关的问题。

关于Cocoa分布式对象、GC客户端、非GC服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/201404/

相关文章:

java - 如果不是父对象,那么在 super.finalize() 方法之后 GC 会在父对象上清除什么?

objective-c - 如何在 Mac OS X 中获取相对于窗口的光标位置?

cocoa - 编写 Cocoa 应用程序脚本

cocoa - 在 NSTableview 中启用多行选择

java - 在 MacOS 10.11.6 中设置环境变量和路径

linux - 在 Makefile 中在 Linux 和 MacOS 上使用 sed

java - 在闪存驱动器上安装 Java

c# - (几乎)所有垃圾收集都是完全收集

cocoa - 与 Quartz 合成时叠加颜色

ruby - 在 Ruby 中删除一个对象