内存屏障

Memory barrier 内存屏障,也称为内存栅栏,是一类同步屏障指令,是CPU或编译器在对内存随机访问的操作中的一个同步点,使得此点之前的所有读写操作都执行后才可以开始执行此点之后的操作。
内存屏障作用

-
- 阻止屏障两侧的指令重排序 Memory barrier 能够让CPU 或编译器在内存访问上有序。一个 Memory barrier 之前的访问操作必定先于其之后的完成。
-
- 强制把写缓冲区/高速缓存中的脏数据等写回主内存,或者让缓存中相应的数据失效。Memory barrier 是一种CPU指令,用于控制特定条件下的重排序和内存可见性问题。Java编译器也会根据内存屏障的规则禁止重排序。
volatile 内存屏障插入策略

- 在每个 volatile 写操作前插入一个 StoreStore 屏障;
- 在每个 volatile 写操作后插入一个 StoreLoad 屏障;
- 在每个 volatile 读操作后插入一个 LoadLoad 屏障;
- 在每个 volatile 读操作后再插入一个 LoadStore 屏障;
volatile 重排序规则