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:解鎖主內存的一塊區域

