易变变量的“读取”速度是否与正常读取速度一样快?

我知道写入volatile变量会从所有CPU的内存中刷新它,但是我想知道对volatile变量的读取是否与正常读取一样快

volatile变量是否可以放在cpu缓存中,或者总是从主内存中获取

你真的应该看看这篇文章:http://brooker.co.za/blog/2012/09/10/volatile.html. 这篇博客文章认为,与x86上的非易失性读取相比,易失性读取可能要慢得多(对于x86也是如此)

  • 测试1是对非易失性变量的并行读写。那里
    没有可见性机制,读取的结果为
    可能是陈腐的

  • 测试2是对易失性变量的并行读写。这并没有具体解决OP的问题。然而值得注意的是,一个有争议的波动率可能非常缓慢
  • 测试3是对紧密循环中的易失性的读取。所证明的是,volatile的语义表明该值可以随着每次循环迭代而改变。因此JVM无法优化读取并将其从循环中提升出来。在测试1中,值很可能被读取并存储了一次,因此没有实际的“读取”发生

马克·布克运行这些测试值得称赞

发表评论