Java記憶體模型(Java Memory Model,JMM)
阿新 • • 發佈:2022-02-14
為什麼要有Java記憶體模型
- 可見性,由快取導致的可見性問題。
- 有序性,由編譯優化導致的有序性問題。
- 原子性,由執行緒切換導致的原子性問題。
Java記憶體模型就是為了解決可見性和有序性問題。
什麼是Java記憶體模型(JMM)
注意:JVM記憶體模型與Java記憶體模型是兩個不一樣的東西。
- JVM記憶體模型:具體指的是JVM中執行時資料區的分割槽。
- JMM是一種規範,是抽象的概念,目的是解決由於多執行緒併發程式設計通過記憶體共享進行通訊時,存在的本地記憶體資料不一致、編譯器會對程式碼指令重排序、處理器會對程式碼亂序執行等帶來的問題,即保證記憶體共享的正確性(可見性、有序性、原子性)。
JMM是一種抽象的概念,它是一種規範,定義了程式中各個變數訪問的方式。JVM執行程式的實體是執行緒,每個執行緒建立時JVM會為其建立相應的工作記憶體(空棧間),用於儲存執行緒私有資料,JMM中規定所有變數都儲存在主記憶體上,所有執行緒都可訪問,執行緒對於變數的操作(賦值、讀取等)必須在工作記憶體進行,操作完成首在寫回主記憶體,這樣個執行緒之間就無法相互訪問,執行緒間的通訊(傳值)必須通過主記憶體來完成。