JVM的記憶體模型

2022-05-06 04:42:11 字數 685 閱讀 7585

參考部落格:

記憶體模型:每乙個執行緒有乙個工作記憶體和主存獨立,工作記憶體存放主存中變數的值的拷貝

當資料從主記憶體複製到工作儲存時,必須出現兩個動作:第一,由主記憶體執行的讀(read)操作;第二,由工作記憶體執行的相應的load操作;當資料從工作記憶體拷貝到主記憶體時,也出現兩個操作:第乙個,由工作記憶體執行的儲存(store)操作;

第二,由主記憶體執行的相應的寫(write)操作每乙個操作都是原子的,即執行期間不會被中斷。對於普通變數,乙個執行緒中更新的值,不能馬上反應在其他變數中如果需要在其他執行緒中立即可見,需要使用 volatile 關鍵字

指令重排:指令重排是指在程式執行過程中, 為了效能考慮, 編譯器和cpu可能會對指令重新排序.。保證執行緒內序列語義,破壞執行緒間的有序性,編譯器不考慮多執行緒間的語義

寫後讀 a = 1;b = a; 寫乙個變數之後,再讀這個位置。

寫後寫 a = 1;a = 2; 寫乙個變數之後,再寫這個變數。

讀後寫 a = b;b = 1; 讀乙個變數之後,再寫這個變數。

以上語句不可重排

可重排: a=1;b=2;

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 一旦初始化完成,其他執行緒就可見 有序性 在本執行緒內,操作都是有序的 重排或 主記憶體同步延時 指令重排 執行緒 內序列語義 寫後...