我有两个关于 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/