JMM(Java线程内存模型)


JMM

1. CPU与内存

1.1 CPU架构历史

早期,计算机是单核的。

随着科技的发展,计算机也从单核CPU -> 多核CPU,多核CPU计算机早期,CPU与主内存的交互图如下:

CPU与主内存的交互图

这种交互方式有一个问题:

  • CPU的执行速度,比 主内存的执行速度,高出太多;而由于与主内存的交互,会导致CPU资源的浪费。

为了解决:上述的问题,计算机的CPU引入了:高速缓存;如下图:

CPU与主内存的交互图

CPU与高速缓存进行交互,高速缓存与主内存进行交互。

通常,为了解决问题A,而引入的方案B,方案B也会有一定的缺陷。

上图中的缺陷就是:

  • 如果在并发情况下,多个CPU 读写 主内存的同一块数据区,会导致数据的不一致。

为了解决:数据的不一致,又引入了:缓存一致性协议,如下图:

CPU与主内存交互

2. JMM

2.1 JMM是什么?

JMM,全称:Java Memory Model(Java线程内存模型)。

JMM,也是借鉴参考了:现代计算机 CPU与主内存 交互的架构。

2.2 JMM内存模型图

JMM内存模型图

2.3 JMM的8个指令

  • lock:锁定主内存的一块区域
  • read:读取主内存的数据
  • load:将读取的数据,写入到:线程的工作内存的变量副本
  • use:使用工作内存的变量副本
  • assign:给工作内存的副本 赋值
  • store:工作内存的副本数据 写出
  • write:将写出的数据,写入到:主内存中
  • unlock:解锁主内存的一块区域

JMM的8个指令操作图


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM