參考1:一篇解決JMM與volatile詳解
參考2:JAVA記憶體區域和記憶體模型

1、什么是JMM模型
- JMM是一種抽象的概念,并不真實存在,是一組規范或者規則;關注的是多個執行緒對共享記憶體空間和執行緒私有作業空間的訪問方式,圍欄并發的原子性、有序性、可見性來展開的,想要了解JAVA的并發編程,就應該理解JMM,
- JMM通過定義了對變數(包括實體成員、靜態成員和組成陣列物件的元素)的訪問方式,在程式運行時,運行程式的是物體是執行緒,每個執行緒創建時候,虛擬機都會為每個執行緒分配一定的記憶體空間,每個執行緒的記憶體空間用來存盤執行緒私有的資料,但是JMM中規定資料都是存盤在共享的主記憶體空間,而且每個執行緒不能直接操作主記憶體的空間,只能訪問主記憶體的空間,且每個執行緒可以操作自己的作業空間,所以每個執行緒將自己用到的資料從共享的主記憶體空間中拷貝一份到其作業空間,操作完之后回寫到主記憶體空間,
- 執行緒中的作業空間是私有的,執行緒之前不能訪問對方的作業空間,比如執行緒A和執行緒B,A不能訪問B的作業空間,同時,B也不能訪問A的作業空間,
2、JVM運行時資料區 和JMM區別 和聯系
區別:
JMM是一種抽象的概念,并不真實存在,是一組規范或者規則,通過規則來控制變數的訪問,圍繞多并發展開
運行時資料區域: 在JVM在運行程式時,記憶體的劃分是具體的,是JVM運行時必要的記憶體劃分
聯系:
1、MM中記憶體有共享的記憶體空間和執行緒私有的作業空間,JVM運行時資料區有 方法區、堆、本地方法堆疊、虛擬機堆疊、程式計數器
2、JVM運行時資料區共享的記憶體空間有 方法區和堆,所以可以理解 JMM的共享記憶體區域包含了 方法區和堆疊,JMM的執行緒私有空間包含了 程式計數器、本地方法堆疊、虛擬機堆疊
3、 Java記憶體模型與硬體記憶體架構的關系
因為JMM只是一種抽象的概念,是一組規則,并不實際存在,不管是作業記憶體的資料還是主記憶體的資料,對于計算機硬體來說都會存盤在計算機主記憶體、CPU快取和CPU暫存器中,所以Java記憶體模型和計算機硬體記憶體架構是一個相互交叉的關系,是一種抽象概念劃分與真實物理硬體的交叉,
4、JAVA記憶體模型資料同步8大原子操作
1、8大原子操作:
lock(鎖定):把一個變數標記為一條執行緒獨占狀態
unlock(解鎖):把一個處于鎖定狀態的變數釋放出來,釋放后的變數才可以被其他執行緒鎖定
read(讀取):把主記憶體中的一個變數讀取傳輸到執行緒的作業記憶體,以便隨后load動作使用
load(加載):把read到執行緒作業記憶體的變數放入作業記憶體的變數副本中
use(使用):把執行緒作業記憶體中的一個變數值傳遞給執行引擎
assign(賦值):從執行引擎接收到的新值賦值給變數,返給作業記憶體
store(存盤):把執行緒作業記憶體的一個變數值傳遞給主記憶體,以便后面的write使用
write(寫入):把store到主記憶體的變數值賦值給變數
2、作用于主記憶體的原子操作: lock、unlock、read、write
3、作用于作業記憶體的原子操作:load、use 、assign、store
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/240518.html
標籤:其他
上一篇:【spark系列4】spark 3.0.1集成delta 0.7.0原理決議--delta自定義sql
下一篇:nginx基本使用

