我什么时候应该打电话给Naming.unbind()?

时间:2008-10-13 12:34:30

标签: java rmi

我有一些代码可以通过RMI提供。

如果我的程序异常终止,我将不会调用Naming.unbind(),并且可能会在RMI注册表中挂起对该对象的引用,并且后续调用具有相同名称的Naming.bind()会失败。

如何确保清除恶意引用?

1 个答案:

答案 0 :(得分:-1)

有一种叫做分布式垃圾收集器(DGC)的东西。它使用租约来跟踪陈旧的绑定,并在不使用时收集它们。设置导出JVM的leaseValue系统属性以确定绑定何时到期。

将值设置得太低会导致网络流量增加。将其设置得太高会导致过时的引用持续时间过长。您可以在客户端查找后调用幂等方法,以确保对象是实时的(或使用类似Weblogic智能存根的东西)。在服务器端,您可以检查注册表,如果存在绑定,则取消注册它(如果它已过时),请释放远程对象并导出新对象或保留它(如果它处于活动状态)。