关于 RMI 理论,我有两个答案。
1) 让我们来看看:
Service impl = new Service();
假设Service是一个远程接口(interface)的实现,它扩展了UniCastRemoteObject;
如果(服务器端)我用上面的代码创建 impl 然后调用:
impl.f();
为了执行 f() ,JVM 使用 stub ?换句话说,f() 将作为远程方法调用?
2) 我一直在寻找分布式垃圾收集,我已经实现了取消引用方法来查看与远程对象关联的计数器何时变为零,它工作正常。 我也实现了 finalize 方法,但是从来没有调用过,你能解释一下为什么吗? 我也尝试解除绑定(bind)远程引用 UnicastRemoteObject.unexportObject(impl,true);但不会调用 finalize。
谢谢
问候
最佳答案
To execute f() , JVM uses stub? In other words f() will be called as remote method ?
没有。但是,如果您通过服务器端的 stub 执行它,它将通过 RMI 执行。无短路。
I have implemented also finalize method, but this is never called, can you explain why?
因为对象没有在本地进行垃圾回收。除了通过 RMI 客户端之外,您可能还有其他引用。 DGC 释放 RMI 对该对象的引用,但它不会释放您自己的引用。 所有 引用必须被释放才能发生本地 GC,即使是它们也不能保证它会发生。
关于java - RMI理论—— stub 和分布式垃圾收集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17641837/