最近项目里的RMI在Linux下运行老出问题,而且问题出得还很不稳定。那个程序启动时会分别在4个端口上绑定4个相同的对象,结果就是有时绑定成功3个,有时候才1个……查看log,抛出下面异常
java.rmi.NoSuchObjectException: no such object in table
上网搜了一下,这篇文章给出了原因和解决方法:我在代码中做RMI绑定的时候用的是局部变量:
registry.rebind(name, UnicastRemoteObject.exportObject(new RemoteObject(), 0));
该局部变量在服务器端被GC后客户端再远程调用方法便会抛出上述异常。解决方法很简单,使用对远程对象的强引用以防止对象被GC,比如把局部引用改为类静态引用
-- EOF --
除非注明(如“转载”、“[zz]”等),本博文章皆为原创内容,转载时请注明: 「转载自程序员的信仰©」
本文链接地址:Java RMI中的NoSuchObjectException
Today on history:
【2022】2021年美国侵犯人权报告
【2006】黑色毛衣 [Jay]
发表回复