Java內存模型
1.工作內存和主內存
Java內存模型規定所有的變量都存儲在主內存中(JVM內存的一部分),每個線程有自己獨立的工作內存,它保存了被該線程使用的變量的主內存復制。線程對這些變量的操作都在自己的工作內存中進行,不能直接操作主內存和其他工作內存中存儲的變量或者變量副本。線程間的變量訪問需通過主內存來完成,三者的關系如圖1所示。
2.Java內存交互協議
Java內存模型定義了8種操作來完成主內存和工作內存的變量訪問,具體如下。
· lock:主內存變量,把一個變量標識為某個線程獨占的狀態。
· unlock:主內存變量,把一個處于鎖定狀態變量釋放出來,被釋放后的變量才可以被其他線程鎖定。
· read:主內存變量,把一個變量的值從主內存傳輸到線程的工作內存中,以便隨后的load動作使用。
· load:工作內存變量,把read讀取到的主內存中的變量值放入工作內存的變量副本中。
· use:工作內存變量,把工作內存中變量的值傳遞給Java虛擬機執行引擎,每當虛擬機遇到一個需要使用到變量值的字節碼指令時,將會執行該操作。
· assign:工作內存變量,把從執行引擎接收到的變量的值賦值給工作變量,每當虛擬機遇到一個給變量賦值的字節碼時,將會執行該操作。
· store:工作內存變量,把工作內存中一個變量的值傳送到主內存中,以便隨后的write操作使用。
· write:主內存變量,把store操作從工作內存中得到的變量值放入主內存的變量中。
?