System.exit在OpenJDK 7 / FreeBSD上似乎需要很长时间

时间:2013-02-11 22:38:25

标签: java freebsd openjdk

我遇到运行Java子进程的性能问题 在Java下,在FreeBSD 9.0-RELEASE i386上运行。

System.exit(),对于此程序,运行大约需要2.6秒。和我 无法弄清楚为什么。 Windows上需要0.025秒。 更新:在OpenJDK 6上运行速度也快得多。

在ktrace下运行OpenJDK7会在关机期间显示以下大量序列:

26795 java 1.808597 CALL _umtx_op(0x2831e068,0xf,0,0,0xbf7a9870)
 26795 java 1.838640 RET _umtx_op -1 errno 60操作超时

我如何弄清楚该计划在这里尝试做什么?或者,是否有一个简单的解决方法或方法来解决这个问题?看起来这个问题经常出现在FreeBSD的操作系统级别上,从网络搜索来判断,但我仍在分析我所发现的东西(并尝试学习libthr等等)。

除了一个打印时间戳,没有系统添加的关闭挂钩,没有要删除的文件,也没有runFinalizersOnExit时,我没有添加任何关闭挂钩。系统似乎花时间在本机方法java.lang.Shutdown.halt0中,我仍然试图分析。

1 个答案:

答案 0 :(得分:0)

操作数0xf是UMTX_OP_WAKE_PRIVATE(参见/usr/src/sys/sys/umtx.h)。这会尝试唤醒内核线程,然后失败。

现在为什么失败是不可能的。它可能是java中的死锁。