【发布时间】:2011-12-20 21:08:15
【问题描述】:
【问题讨论】:
-
好吧,你需要
volatile(和/或sync和/或...),否则你不需要。为什么还有关于“性能”的问题? (是的,同步/可见性保证会增加一些开销。) -
禁止重新排序,不能缓存,因为它应该从主内存中读取(以确保可见性)
【问题讨论】:
volatile(和/或sync和/或...),否则你不需要。为什么还有关于“性能”的问题? (是的,同步/可见性保证会增加一些开销。)
将变量声明为volatile 会导致JIT 编译器在每次使用变量时使用从内存读取/写入内存的指令。在后一种情况下,必须将高速缓存行刷新到主内存,以便其他处理器立即看到更改。读/写内存周期到执行时间。
相比之下,如果您不将变量声明为易失性,JIT 编译器可能会发出指令以从寄存器或一级或二级内存缓存读取/写入变量的状态。平均而言,这将为每次读取或写入节省几个时钟周期。
如需更详细的处理,请阅读Is volatile expensive? 的答案。
【讨论】: