首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >RMI理论-存根和分布式垃圾收集

RMI理论-存根和分布式垃圾收集
EN

Stack Overflow用户
提问于 2013-07-15 01:32:33
回答 2查看 1.5K关注 0票数 3

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

1)让我们来看一下:

代码语言:javascript
复制
Service impl = new Service();

假设服务是远程接口的实现,并且它扩展了UniCastRemoteObject;

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

代码语言:javascript
复制
impl.f();

为了执行f(),JVM使用存根?换句话说,f()将作为远程方法被调用吗?

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

谢谢

问候

EN

回答 2

Stack Overflow用户

发布于 2013-07-15 05:26:34

来执行f(),JVM使用存根?换句话说,f()将作为远程方法被调用吗?

不是的。但如果您通过服务器的存根执行它,它将通过RMI执行。没有短路。

我也实现了finalize方法,但是这个方法从来没有被调用过,你能解释一下为什么吗?

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

票数 2
EN

Stack Overflow用户

发布于 2013-07-15 01:41:26

1)不,当您在本地与远程对象对话时,这不会通过存根进行。通常,只有在从RMI注册表检索对象时,或者在另一个远程调用中获得引用时,才会插入存根。

2)我不太了解所使用的算法,但RMI确实有分布式垃圾收集,应该注意释放未使用的对象。但就像任何垃圾收集一样,如果引用计数为零,这并不意味着对象将自动被垃圾收集。这通常只在系统需要释放内存时发生,而在应用程序的生命周期中可能永远不会发生这种情况。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17641837

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档