加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

如何在使用进程内Java RMI注册表时很好地关闭

发布时间:2020-12-15 02:13:15 所属栏目:Java 来源:网络整理
导读:案件 我在服务器进程中使用进程内* Java RMI注册表. 我在注册表中绑定1个对象. 我的客户端进程连接并查找绑定,并传递远程对象. 现在我希望服务器进程干净地关闭,即不再存在deamon-threads.使用RMI,我在服务器进程中的一个对象上调用“close”,问题是这个“关
案件

我在服务器进程中使用进程内* Java RMI注册表.

我在注册表中绑定1个对象.

我的客户端进程连接并查找绑定,并传递远程对象.

现在我希望服务器进程干净地关闭,即不再存在deamon-threads.使用RMI,我在服务器进程中的一个对象上调用“close”,问题是这个“关闭”方法实际上必须做什么.

如何确保在使用RMI导出对象的进程中没有运行非守护程序线程?

据我所知,我必须取消导出** JVM关闭的所有导出对象?由于许多对象已经通过RMI传递,我将不得不维护这些对象的集合和每个对象的展开**.

我已经读过任何导出的对象都应该在垃圾收集器时自动取消它(现在找不到引用)但是我的经验告诉我,某些对象(特别是distrubuted?)可能需要很长时间才能被垃圾收集,所以这是不是一个选择.

*使用LocateRegistry创建
** Unexport使用UnicastRemoteObject执行

解决方法

How do I make sure that no non-daemon threads are running in a process using RMI exported objects?

取消所有内容,包括注册表.请注意,这需要保存createRegistry()的返回值.

As far as I can read,I must unexport** all exported objects for the JVM to shut down? Since many objects have been passed over RMI,I would have to maintain this set of these objects and unexport** each one.

正确,除非您使用未参考设施.

I have read that any exported object should unexport itself when garbage collected (can’t find a reference right now) but my experience tells me that it can take a long time for some objects (especially distributed?) to be garbage collected so this is not really an option.

您可以控制所有DGC超时.它确实是一个选项,通过Unreferenced接口.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读