我有一些代码可以通过RMI提供。
如果我的程序异常终止,我将不会调用Naming.unbind(),并且可能会在RMI注册表中挂起对该对象的引用,并且后续调用具有相同名称的Naming.bind()会失败。
如何确保清除恶意引用?
答案 0 :(得分:-1)
有一种叫做分布式垃圾收集器(DGC)的东西。它使用租约来跟踪陈旧的绑定,并在不使用时收集它们。设置导出JVM的leaseValue系统属性以确定绑定何时到期。
将值设置得太低会导致网络流量增加。将其设置得太高会导致过时的引用持续时间过长。您可以在客户端查找后调用幂等方法,以确保对象是实时的(或使用类似Weblogic智能存根的东西)。在服务器端,您可以检查注册表,如果存在绑定,则取消注册它(如果它已过时),请释放远程对象并导出新对象或保留它(如果它处于活动状态)。