取消导出在远程方法调用中作为参数传递的远程对象

Unexporting remote objects passed as arguments in remote method call

我想知道当远程对象不再需要存在时,是否需要在远程方法调用中显式取消导出作为参数传递的远程对象。例如:我有一个在线游戏,当客户端向 GameServer(绑定在 RMI 注册表中)请求游戏时,服务器 returns 向客户端发送一个 GameHandler 作为远程对象。当游戏结束并且 GameHandler 不再需要激活时,我是否必须调用 UnicastRemoteObject.unexportObject(this, false);?我正在这样做,但有时我会收到 NoSuchObjectException.

当没有远程或本地引用时,它将通过 DGC 和本地 GC 自动取消导出。如果您想知道 DGC 何时启动,请实现 Unreferenced 接口。