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