在一个双四核 Windows 2008 64 位服务器上运行 Java 1.7.0_09,模拟了 3000 个并发会话和大约每秒 300 次事务的负载测试。在实际操作中,我们观察到两个确认的虚假唤醒实例,即线程在未被通知且等待超时之前退出其 wait() 方法。
在唤醒期间,机器 CPU 利用率低于 20%,有大量可用内存。也没有观察到过度垃圾回收。幸运的是,我们最近引入的自旋锁能够捕获此条件并继续等待()。
虚假唤醒现象在 java.lang.Object wait() 的 JavaDoc 中有记录,但这是我第一次在实践中看到它。这是 Windows 还是 Java 中的 bug?
在唤醒期间,机器 CPU 利用率低于 20%,有大量可用内存。也没有观察到过度垃圾回收。幸运的是,我们最近引入的自旋锁能够捕获此条件并继续等待()。
虚假唤醒现象在 java.lang.Object wait() 的 JavaDoc 中有记录,但这是我第一次在实践中看到它。这是 Windows 还是 Java 中的 bug?