Please enable JavaScript.
Coggle requires JavaScript to display documents.
JMM(Java Memory Model) - Coggle Diagram
JMM(Java Memory Model)
特性
可見性
當一個執行緒修改值,其他執行緒看得到變更(立即更新到Main Memory)
JMM 規範定義了 volatile、synchronized 等機制來保證可見性
有序性
JMM定義操作有序性規則,確保特定條件下執行緒對變數的操作順序是可預測的
JMM 保證了某些操作的執行順序不會被重新排序,以避免出現指令重排帶來的問題。例如,在 synchronized 或 volatile 關鍵字控制下,JMM 會阻止某些操作的重排序,從而保證執行緒之間的正確性。
原子性
JMM保證基本數據的讀寫操作是原子性,不會被中斷
某些操作(如基本型別變數的賦值)在多執行緒下是原子的,無需額外的同步措施即可保證安全。但複合操作(如 i++)則不具備原子性,需加鎖來確保操作不會被其他執行緒打斷。
通常都可由synchronized和volatile實作
static也是存放在Main Memory中,可在多線程中共享,但是存放在Method Area中,而volatile存放在Heap Memory中。static & JMM
-
-
-
主記憶體及工作記憶體(快取)機制
設計原因
CPU為提高執行效能,會使用多層次的快取(L1, L2, L3),這些快取儲存了部分Main Memory,以便快速存取,減少每次讀寫變數都必須與相對較慢Main memory進行操作的開銷
設計原理
-
局部性原則
程式的執行具有空間局部性及時間侷限性
空間局部性: 訪問相鄰記憶體位置的傾向
時間局部性: 重複訪問相同記憶體位置的傾向
快取記憶體利用這些傾向,預先載入並保持最近使用的資料
-
主記憶體與工作記憶體的操作互動
讀取資料: Thread讀取變數時,先檢查快取中是否有該變數的副本,如果有(快取命中),直接從快取中讀取;否則從Main memory讀取並載入快取(快取未命中)
寫入資料: Thread修改變數時,先修改快取中的副本,MESI會確保資料的一致性,修改後的資料最終寫回Main memroy
-