volatile的作用与原理
1. 作用
1.1 内存屏障
1.2 内存可见性
2. 原理
2.1 怎么实现内存屏障
2.1.1 class字节码
ACC_VOLATILE
2.1.2JVM层面
1)
StareStoreBarrier
volatile写
StoreLoadBarrier
2)
LoadLoadBarrier
volatile读
LoadLoadBarrier
2.1.3硬件层面
lock指令
或者
mfence
sfence
lfence
3. 为什么出现内存屏障
- 指令重排序问题
4. 怎么保证缓存一致性
4.1 JVM层面
定义了JMM模型
4.2 硬件层面
缓存一致性协议
lock指令