最近项目里的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,比如把局部引用改为类静态引用