eve*_*tic 5 java client distributed rmi server
案件
我在服务器进程中使用进程内* Java RMI 注册表。
我在注册表中绑定了 1 个对象。
我的客户端进程连接并查找绑定和传递的远程对象。
现在我希望服务器进程完全关闭,即不应存在更多守护线程。使用 RMI,我在服务器进程中的一个对象上调用“close”,问题是这个“close”方法实际上必须做什么。
问题
如何确保使用 RMI 导出对象的进程中没有运行非守护线程?
据我所知,我必须取消导出**所有导出的对象才能关闭 JVM?由于许多对象已通过 RMI 传递,因此我必须维护这组对象并取消导出**每个对象。
我读过任何导出的对象在垃圾收集时都应该取消导出自身(现在找不到引用),但我的经验告诉我,某些对象(尤其是分布的?)可能需要很长时间才能被垃圾收集,所以这是不是一个真正的选择。
如何确保使用 RMI 导出对象的进程中没有运行非守护线程?
全部取消导出,包括注册表。请注意,这需要保存返回值createRegistry().
据我所知,我必须取消导出**所有导出的对象才能关闭 JVM?由于许多对象已通过 RMI 传递,因此我必须维护这组对象并取消导出**每个对象。
正确,除非您使用该Unreferenced设施。
我读过任何导出的对象在垃圾收集时都应该取消导出自身(现在找不到引用),但我的经验告诉我,某些对象(特别是分布式?)可能需要很长时间才能被垃圾收集,所以这是不是一个真正的选择。
您可以控制所有 DGC 超时。这确实是一个选项,通过Unreferenced界面。