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