是否有任何JVM通过自旋等待实现阻塞?

| 在《 Java Concurrency in Practice》中,作者写道:   当争用锁定时,丢失的线程必须阻塞。 JVM可以通过旋转等待(反复尝试获取锁直到成功)来实现阻塞,也可以通过操作系统挂起阻塞的线程来实现阻塞。哪种效率更高取决于上下文切换开销与锁定可用时间之间的关系。对于短暂的等待,最好使用自旋等待;对于长时间的等待,最好使用悬浮。一些JVM基于对过去等待时间的分析数据在两个自适应之间进行选择,但大多数JVM只是挂起线程等待锁定。 当我读到这篇文章时,我很惊讶。是否有任何已知的JVM由于分析结果而总是在自旋等待或有时自旋等待中实现阻塞?现在很难相信。     
已邀请:
        这是JRockit可以使用自旋锁的证据-http://forums.oracle.com/forums/thread.jspa?threadID=816625&tstart=494 而且,如果您在此处列出的JVM选项中搜索\“ spin \”,您将看到在Hotspot JVM中使用/支持自旋锁的证据。     
        作者写的东西是对的,而且只有道理。 Linux也是如此。之所以使用自旋锁,是因为大多数资源在不到一毫秒的时间内受到保护。因此,要挂起,将寄存器的所有内容压入堆栈并放弃CPU只是过多的开销,不值得。因此,即使它只是产生严格的指令集,有时只是浪费时间,它仍然比换出指令更有效。 话虽这么说,通过VM分析,理想情况下将使您的处理效率更高。因此,在某些情况下您总是想暂停吗?还是总是旋转等待?     

要回复问题请先登录注册