Java内存模型解析
一.java內存模型的誕生原因以及作用
1.誕生原因
java虛擬機中規范定義的一種內存模型,來屏蔽調各種硬件和操作系統之間的內存訪問差異,為了實現java程序在各種平臺都能達到一致的內存訪問效果。這是它誕生的緣由。
2.作用
其實這個內存模型主要就是去定義程序中各個變量的訪問規則,即在虛擬機中將變量存儲到內存和從內存中取出來的底層細節,這里的變量,是指實例字段,靜態字段,數組等,不包括局部變量和方法參數。
二.內存模型概述
1.主內存
所以的變量都存在主內存,這里的內存也就是虛擬機的內存,就是虛擬機在運行時,系統分給虛擬機的內存。
2.工作內存
工作內存保存了該線程使用到的變量的主內存副本拷貝,線程對變量的操作必須在工作內存內進行.
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
? 3.內存間的交互操作
lock(鎖定):作用于主內存的變量,把一個變量標識為一條線程獨占的狀態。
unlock(解鎖):釋放鎖定的變量,這時才可以被其他線程鎖定。
read(讀取):主內存讀到工作內存。
load(加載):把從主內存中的獲取的變量放入工作內存的變量副本中。
use(使用):把工作內存的變量加載到執行引擎,當虛擬機遇到一個需要使用變量的字節碼的指令時會用到。
assign(賦值):執行引擎到工作內存。
store(存儲):工作內存傳到主內存。
write(寫入):把store傳入來的變量放在主內存的變量里。
4.內存交互操作的規則
? ? 1.read和load,store和write必須順序執行,不一定連續執行。
? ? 2.工作內存assign了,值改變了,不能不同步會主內存
3.沒有assign不能返回主內存.
4.實施use,store之前,要執行assign,和load
5.一個變量同一時刻只能允許一條線程對其進行lock操作,但是lock可以被同一條線程執行多次。
6.如果對一個變量進行lock,那么就清空工作內存的值,執行引擎要使用時要重新load和assign(load和assign會引起變量的更新)。
7.變量沒有被lock,不能執行unlock。
8.執行unlock,要先store和write同步變量回主內存。
轉載于:https://www.cnblogs.com/JimmyFanHome/p/9912394.html
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的Java内存模型解析的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: oracle RAC切换归档
- 下一篇: Java集合---Arrays类源码解析