標籤:處理器 問題 http 完成 lock 過程 ges 值傳遞 logs
硬體裝置
處理器的運算速度很快,但是處理器又要和記憶體打交道,讀取運算資料、儲存運算結果的過程很緩慢,此時需要一個快取,運算時將資料複製到緩衝中,運算完成後將結果同步會記憶體,處理器無需等待記憶體讀寫加快速度。但是會產生緩衝一致性問題,需要依賴一定的協議。“記憶體模型”可以理解為在特定的協議下,對特定的記憶體或快取進行讀寫訪問的過程抽象。
Java記憶體模型
主記憶體和工作記憶體
所有的變數都儲存在主記憶體中(與硬體主記憶體類比,線程共用,主要對應Java堆中的執行個體資料)。每條線程都有自己的工作記憶體(與硬體快取類比,線程不共用,主要對應虛擬機器棧中的部分資料),線程的工作記憶體儲存了該線程使用到的變數的主記憶體副本拷貝,線程對變數的操作(讀寫、賦值)都在工作記憶體中進行,不能直接操作主記憶體的變數,不同線程之間不能互相訪問對方工作記憶體中的變數,只能通過主記憶體來訪問。
主記憶體與工作記憶體之間的互動操作
lock(鎖定):作用於主記憶體的變數,將主記憶體中的一個變數標誌為一條線程獨佔狀態。
unlock(解鎖):作用於主記憶體的變數,將標識為線程獨佔狀態的變數釋放出啦,之後才能被其他線程 lock。
read(讀取):作用於主記憶體的變數,將一個變數的值傳輸到工作記憶體中,以便 load 操作。
load(載入):作用於工作記憶體的變數,把 read 操作得到的變數值放入到變數副本中。
use(使用):作用於工作記憶體的變數,將變數的值傳遞給執行引擎,虛擬機器遇到使用變數的值的位元組碼指令時執行該操作。
assign(賦值):作用於工作記憶體的變數,把從執行引擎獲得的值賦值給工作記憶體的變數,虛擬機器遇到給變數賦值的位元組碼指令時執行該操作。
store(儲存):作用於工作記憶體的變數,將變數傳送到主記憶體中,以便 write 操作。
write(寫入):作用於主記憶體的變數,把 store 操作得到的變數值放入到主記憶體的變數中。
Java記憶體模型