JMM
1. CPU与内存
1.1 CPU架构历史
早期,计算机是单核的。
随着科技的发展,计算机也从单核CPU -> 多核CPU,多核CPU计算机早期,CPU与主内存的交互图如下:
这种交互方式有一个问题:
- CPU的执行速度,比 主内存的执行速度,高出太多;而由于与主内存的交互,会导致CPU资源的浪费。
为了解决:上述的问题,计算机的CPU引入了:高速缓存;如下图:
CPU与高速缓存进行交互,高速缓存与主内存进行交互。
通常,为了解决问题A,而引入的方案B,方案B也会有一定的缺陷。
上图中的缺陷就是:
- 如果在并发情况下,多个CPU 读写 主内存的同一块数据区,会导致数据的不一致。
为了解决:数据的不一致,又引入了:缓存一致性协议,如下图:
2. JMM
2.1 JMM是什么?
JMM,全称:Java Memory Model(Java线程内存模型)。
JMM,也是借鉴参考了:现代计算机 CPU与主内存 交互的架构。
2.2 JMM内存模型图
2.3 JMM的8个指令
- lock:锁定主内存的一块区域
- read:读取主内存的数据
- load:将读取的数据,写入到:线程的工作内存的变量副本
- use:使用工作内存的变量副本
- assign:给工作内存的副本 赋值
- store:工作内存的副本数据 写出
- write:将写出的数据,写入到:主内存中
- unlock:解锁主内存的一块区域