java volatile性能问题

use*_*323 2 java volatile

可能重复:
易挥发性昂贵?

我听说在多线程应用程序中使用volatile变量会带来一些性能问题.

有人解释原因吗?

Ste*_*n C 6

声明变量volatile会导致JIT编译器在每次使用变量时使用读取/写入内存的指令.在后一种情况下,必须将高速缓存行刷新到主存储器,其他处理器立即看到更改.读/写存储器循环到执行时间.

相反,如果您不将变量声明为volatile,则JIT编译器可以发出指令以从寄存器或1级或2级内存高速缓存读取/写入变量的状态.平均而言,这将为每次读取或写入节省几个时钟周期.

如需更详细的治疗,请阅读易挥发的答案.