JVM内存屏障(Memory Barrier)

2018-05-08  本文已影响0人  luoyoub

内存屏障(Memory Barrier)

内存屏障可以禁止特定类型处理器的重排序,从而让程序按我们预想的流程去执行。内存屏障,又称内存栅栏,是一个CPU指令,基本上它是一条这样的指令:

编译器和CPU能够重排序指令,保证最终相同的结果,尝试优化性能。插入一条Memory Barrier会告诉编译器和CPU:不管什么指令都不能和这条Memory Barrier指令重排序。

Memory Barrier所做的另外一件事是强制刷出各种CPU cache,如一个Write-Barrier(写入屏障)将刷出所有在Barrier之前写入 cache 的数据,因此,任何CPU上的线程都能读取到这些数据的最新版本。

“这和java有什么关系?上面java内存模型中讲到的volatile是基于Memory Barrier实现的”

如果一个变量是volatile修饰的,JMM会在写入这个字段之后插进一个Write-Barrier指令,并在读这个字段之前插入一个Read-Barrier指令。这意味着,如果写入一个volatile变量,就可以保证:

参考资料

【Java内存模型Cookbook(二)内存屏障】http://ifeve.com/jmm-cookbook-mb/

上一篇下一篇

猜你喜欢

热点阅读