記憶體模型:
1.每乙個執行緒有乙個工作記憶體
2.工作記憶體存放主存中變數的值的拷貝
1,當資料從主存複製到工作儲存時,必須出現兩個操作:第一,由主記憶體執行read操作,第二,由工作記憶體執行的響應的load操作,當資料從工作記憶體拷貝到主記憶體時,也出現兩個操作:第一由工作記憶體執行的儲存store操作,第二,由主記憶體執行的相應的寫操作。
2.每乙個操作都是原子的,即執行期間不會被中斷
3.對於普通變數,乙個執行緒總更新的值,不能馬上反應在其他變數中,如果需要在其他執行緒中立即可見,需要使用volatile關鍵字。
public class volatilestopthread extends thread
public void run()
system.out.println("stop thread");
} public static void main(string args)throws exception
}
可見性:乙個執行緒修改了變數,其他執行緒可以立即知道
保證可見性的方法:volatile,synchronized(unlock之前,寫變數值回主存),final(一旦初始化完成,其他執行緒就可見)
有序性:
1.程式順序原則:乙個執行緒內保證語義的序列性
2.volatile規則:volatile變數的寫,先發生於讀
3.鎖規則:解鎖必然發生在隨後的加鎖前
4.傳遞性:a先於b,b先於c,那麼必然a先於c
5.執行緒的start方法先於他的每乙個動作
6.執行緒的所有操作先於執行緒的終結
7.執行緒的中斷先於被中斷執行緒的**
8.物件的建構函式執行結束先於finalize()方法
解釋執行:
1.解釋執行以解釋方式執行位元組碼
2.解釋執行的意思是:讀一句執行一句
編譯執行(jit)
1.講位元組碼編譯成機器碼
2.直接執行機器碼
3.執行時編譯
4.編譯後效能有數量級的提公升
jvm記憶體模型 JVM記憶體模型詳情解析
一 結構圖 note string常量池 存在 堆記憶體中 二 各部分詳情解析 1 堆1 老年代 物件年齡 經過一次 monitor gc 年齡加1 15 的會存到 老年代 2 年輕代 3 常量池 string常量 儲存在堆中 2 虛擬機器棧 1 區域性變數表 2 運算元棧 3 動態鏈結 4 方法出...
jvm記憶體模型
主要分為棧,堆,方法區,程式計數器 1.程式計數器 2.棧 stack 虛擬機器棧 每個執行緒獨生成乙個棧,執行緒中每呼叫乙個方法生成乙個棧幀,棧幀依次壓棧 棧幀中存放了每個方法的基本資料變數,物件的引用,操作指令,出口資訊等 本地方法棧 存放的是native方法 其他語言寫的 其他和虛擬機器棧一樣...
jvm記憶體模型
補充 可見性 乙個執行緒修改了變數,其他執行緒可以立即知道 保證可見性的方法 volatile synchronized unlock之前,寫變數值回主存 final 一旦初始化完成,其他執行緒就可見 有序性 在本執行緒內,操作都是有序的 重排或 主記憶體同步延時 指令重排 執行緒 內序列語義 寫後...