Java线程内存模型(JMM)

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

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

 

 

面试题:

3

32位

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值