JMM:java manager model
多核并发缓存架构

以前是总线锁来实现MESI缓存一致性,现在使用缓存锁+总线锁

有四种状态:Modified:修改 , Exclusice:独享 , Shared:共享 , Invalid:被修改后其他缓存中的此字段为无效

伪共享的解决:使用缓存行的对齐能够提高效率




以前是总线加锁:共享变量加lock,线程执行完unlock
现在是MESI缓存一致性协议

Volatile实现原理:
底层实现主要通过汇编lock前缀指令,它会锁定这块区域的缓存(缓存行锁定)并写回到主内存
lock指令的解释:
1 会将当前处理器缓存行的数据 立即 写回到系统内存内存
2 这个写回内存的操作会引起在其他CPU里缓存了该内存地址的数据无效(MESI协议)
当数据失效,会从主内存重新拉取数据
如下initFlag 是加了volatile 的变量


并发编程特性:可见性,有序性,原子性
可见性:及时感知到改变
volatile保证可见性和有序性,但是不保证原子性,保证原子性需要借助synchronized 这样的锁机制


有序性保证:
1 volatile
2 CPU内存屏障
3 lock汇编指令
volatile实现细节
字节码层面:ACC_VOLATILE

JVM层面:


Synchronized

面试题:


2

3

32位

探讨Java内存模型(JMM)与多核环境下MESI缓存一致性协议,解析Volatile关键字实现原理及其对并发编程中可见性、有序性和原子性的影响。
1507

被折叠的 条评论
为什么被折叠?



