【问题标题】:Cocoa Distributed Objects, GC client, non-GC serverCocoa 分布式对象、GC 客户端、非 GC 服务器
【发布时间】:2008-10-14 14:32:22
【问题描述】:

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

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

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

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

【问题讨论】:

  • 客户端是应用程序还是命令行工具?
  • 有趣的是,我今天发现了一个非常相似的问题,只是在我的情况下,双方都没有使用 GC(我将其关闭以确保它不是导致错误的原因)。查看我的问题 (stackoverflow.com/questions/2521514/…) 和我在此处发布的示例。就像你说的,手动断开连接是可行的,但这似乎不对。那么,DO 的工作方式是否存在我们从根本上遗漏的东西?

标签: cocoa macos garbage-collection distributed-objects


【解决方案1】:

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

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

请参阅The Subtle Dangers Of Distributed Objects,了解其他与 DO 相关的问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多