java 6在提高内部锁性能方面带来的四大变化之一是自适应旋转技术。什么是适应性纺丝?它是自旋锁和互斥锁的组合吗?有人能用一种简单易懂的方式来解释这种策略的用处吗?从JDK6开始,这种策略在默认情况下是可用的。
发布于 2013-12-19 19:27:08
什么是适应性纺丝?
引用此Java 6性能页面
自适应自旋是一种优化技术,在这种优化技术中,试图进行竞争的同步进入操作的线程采用两相自旋加块策略。这种技术使线程能够避免影响性能的不良影响,例如上下文切换和翻译旁缓存(TLB)的重新填充。它是“自适应的”,因为自旋的持续时间是由基于诸如最近在同一监视器上的自旋尝试的成功率和/或失败率以及当前锁所有者的状态的决策决定的。
因此,线程最初尝试旋转几次,试图在实际阻塞之前获取一个锁。然后,在将来,它使用以前的成功/失败度量来自适应地决定它应该尝试旋转还是阻塞。旋转会浪费CPU时间,而阻塞可能会导致上下文切换,并且线程可能会等待超过必要的时间。我们的目标是根据过去的行为来优化这两个问题。
有关更多细节,performance引用了这个由Dice编写的题为Java 6 (HotSpot)中的同步的演示文稿。第一张幻灯片的标题是“竞争成本(可伸缩性+延迟)”:
演示文稿后面有题为“自适应旋转”的幻灯片:
有趣的东西。
https://stackoverflow.com/questions/20689718
复制相似问题