工作內存與主內存

工作內存與主內存

Java 的內存模型

  • java 的內存模型分爲主內存和工作內存,所有線程共享主內存,每個線程都有自己的工作內存,不是共享的。一個線程不能訪問另一個線程的工作內存。線程之間通過主內存來實現線程兼間的通信。
  • 線程的工作內存是所需變量的主內存的一份拷貝副本,一個線程對主內存的操作包括(讀取、載入、使用,賦值、存儲、寫入)。多線程間的工作流程如下圖:

內存模型

內存間的交互模型

JLS定義了線程對主存的操作指令:lock,unlock,read,load,use,assign,store,write。這些行爲是不可分解的原子操作,在使用上相互依賴,read-load從主內存複製變量到當前工作內存,use-assign執行代碼改變共享變量值,store-write用工作內存數據刷新主存相關內容。

  • read(讀取):作用於主內存變量,把一個變量值從主內存傳輸到線程的工作內存中,以便隨後的load動作使用
  • load(載入):作用於工作內存的變量,它把read操作從主內存中得到的變量值放入工作內存的變量副本中。
  • use(使用):作用於工作內存的變量,把工作內存中的一個變量值傳遞給執行引擎,每當虛擬機遇到一個需要使用變量的值的字節碼指令時將會執行這個操作。
  • assign(賦值):作用於工作內存的變量,它把一個從執行引擎接收到的值賦值給工作內存的變量,每當虛擬機遇到一個給變量賦值的字節碼指令時執行這個操作。
  • store(存儲):作用於工作內存的變量,把工作內存中的一個變量的值傳送到主內存中,以便隨後的write的操作。
  • write(寫入):作用於主內存的變量,它把store操作從工作內存中一個變量的值傳送到主內存的變量中。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章