ORB.destroy() 没有正确清理并且 ORB 对象实例没有被垃圾收集

Posted

技术标签:

【中文标题】ORB.destroy() 没有正确清理并且 ORB 对象实例没有被垃圾收集【英文标题】:ORB.destroy() does not cleanup correctly and ORB object instances are not garbage collected 【发布时间】:2016-03-11 09:16:30 【问题描述】:

问题:ORB.destroy() 没有正确清理并且 ORB 对象实例没有被垃圾回收。

这个问题是在 JDK5 中提出的,并在此处记录的后续版本中得到修复 http://bugs.java.com/view_bug.do?bug_id=6354718。我们正在使用 JDK7 并且仍然看到文件描述符已打开以进行连接并且永远不会被释放作为立即解决方法我们增加了 OS FB 限制(但有一天这个问题会再次袭击我们)。

对于每个连接,我们使用命令“lsof -p process-id”在下面看到这个

命令 PID 用户 FD 类型设备大小/关闭节点名称

java 14674 xyz 106u IPv6 xyz 0t0 TCP *:xyz (LISTEN)

我们还尝试运行示例程序,该示例程序能够看到使用新的 JDK6 和 JDK7 关闭的连接(使用 TCP 查看器分析连接)。

不明白为什么 helloworld corba 程序可以正常工作,但在我们正在做的两种情况下都不能与我们的应用程序一起工作:

orb.shutdown(true);
orb.destroy();

我们也尝试过,但它不会释放连接(其中 rootNamingContext 是 NamingContextExt 的实例):

rootNamingContext._release();
rootNamingContext = null;
System.gc();

【问题讨论】:

使用 tcpdump 进一步调查我们发现会话正确关闭。 【参考方案1】:

使用 tcpdump 进一步调查,我们发现连接正确关闭。

【讨论】:

以上是关于ORB.destroy() 没有正确清理并且 ORB 对象实例没有被垃圾收集的主要内容,如果未能解决你的问题,请参考以下文章

Flyway 没有正确清理数据库,执行了两次迁移文件

如何正确清理 AVCaptureSession 和 AVCaptureVideoPreviewLayer

在具有多个返回点的函数中清理的正确方法

为啥将代码包装到“useEffect”中而没有第二个参数并且无需清理?

在将数据输出回文本区域时,如何正确清理从文本区域接收的数据?

手机看出现please add or correct eventreceiver in androidmanifest!怎么解决