JMM底層原理

2021-09-27 09:37:03 字數 1090 閱讀 6763

一:jmm資料原子操作

8大原子操作

1:read(讀取):從主記憶體讀取資料

2:load(載入):將主記憶體讀取到的資料載入到工作記憶體

3:use(使用):從工作記憶體讀取資料計算

4:assign(賦值):將計算好的值重新賦值到工作記憶體中

5:store(儲存):將工作記憶體寫入到主記憶體

6:write(寫入):將store過去的變數值賦值給主記憶體中的變數

7:lock(鎖定):將主記憶體變數加鎖,使其變成執行緒獨佔狀態

8:unlock(解鎖):將主記憶體變數解鎖,解鎖後其他執行緒可以鎖定該變數

匯流排加鎖(效能太低)  早期版本使用

cpu從主記憶體讀取資料到快取記憶體,會在匯流排對這個資料進行加鎖,這樣其他cpu就沒法去讀或寫這個資料,直到這個cpu使用完資料並釋放鎖,其他cpu才能讀取該資料

​mesi快取一致性協議(modified修改 exclusive獨享互斥 share共享 invalid失效)

多個cpu從主記憶體讀取同乙個資料到自己的快取記憶體,當其中某個cpu修改了快取的資料,該資料會馬上同步到主記憶體,其他cpu通過==匯流排嗅探機制==可以感知到資料的變化從而使自己快取裡的資料失效

二:volatile關鍵字理解

檢視組合語言,匯入兩個包,hsdis-amd64.dll和hsdis-amd64.lib

​volatile快取可見性實現原理

底層實現主要通過彙編lock字首指令,他會鎖定這塊記憶體區域的快取(快取行鎖定)並寫回主記憶體

lock指令字首

1.會將當前指令行的資料立即寫回到系統記憶體中

2.這個寫回記憶體的操作會經過匯流排,引起其他cpu觸發匯流排嗅探機制,使得他們的快取資料無效(mesi協議)

volatile底層也會對其加鎖,但是在store之前加鎖,和原始的匯流排加鎖的時機不一樣,鎖的粒度大大降低,

三:併發程式設計的三大特性、

併發程式設計的三大特性

可見性原子性

有序性volatile保證可見性和有序性,不能保證原子性,保證原子性 需要借助synchronized這樣的鎖機制

HashMap底層原理

1.hashmap概述 hashmap是基於雜湊表的map介面的非同步實現。此實現提供所有可選的對映操作,並允許使用null值和null鍵。此類不保證對映的順序,特別是它不保證該順序恆久不變。2.hashmap的資料結構 注意,迭代器的快速失敗行為不能得到保證,一般來說,存在非同步的併發修改時,不可...

Spring IoC底層原理

siwuxie095 spring ioc 底層原理 1 ioc 即 inversion of control,控制反轉,把物件的建立 交給 spring 進行管理 2 ioc 容器管理 bean 的方式 1 基於 配置檔案的方式 2 基於 註解的方式 3 ioc 底層原理所使用的技術 1 xml ...

redis底層原理

plain view plain copy redis set message hello redis 物件的名稱 redis string 字串物件 redis list 列表物件 redis hash 雜湊物件 redis set 集合物件 redis zset 有序集合物件 cpp view ...