我有两个关于 RMI 理论的答案。

1)让我们来看看:

Service impl = new Service();

假设 Service 是远程接口(interface)的实现,并且它扩展了 UniCastRemoteObject;

如果(服务器端)我用上面的代码创建 impl 然后调用:
impl.f();

要执行 f() ,JVM 使用 stub?换句话说 f() 将被称为远程方法?

2)我正在寻找分布式垃圾收集,我已经实现了 unreference 方法来查看与远程对象关联的计数器何时变为零,它工作正常。
我也实现了 finalize 方法,但是从来没有调用过,你能解释一下为什么吗?
我也尝试解除远程引用 UnicastRemoteObject.unexportObject(impl,true); 的绑定(bind)。但最终没有被调用。

谢谢

问候

最佳答案



不是。但是如果您通过服务器上的 stub 执行它,它将通过 RMI。无短路。



因为对象没有在本地被垃圾收集。除了通过 RMI 客户端之外,您可能还有另一个引用。 DGC 释放 RMI 对对象的引用,但不会释放您自己的引用。必须释放所有引用才能发生本地 GC,即使它们也不能保证它会发生。

关于java - RMI 理论 - stub 和分布式垃圾收集,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17641837/

10-12 04:05
查看更多