jvm記憶體模型

2021-08-31 13:44:24 字數 1428 閱讀 2280

補充:可見性

乙個執行緒修改了變數,其他執行緒可以立即知道

保證可見性的方法

- volatile

- synchronized (unlock之前,寫變數值回主存)

- final(一旦初始化完成,其他執行緒就可見)

有序性

–在本執行緒內,操作都是有序的 –

重排或 主記憶體同步延時)

指令重排

– 執行緒

內序列語義 •

寫後讀 

a = 1;b = a; 

寫乙個變數之後,再讀這個位置。 •

寫後寫 

a = 1;a = 2; 

寫乙個變數之後,再寫這個變數。 •

讀後寫 

a =

b;b= 1; 

讀乙個變數之後,再寫這個變數。

•以上語句

不可重排 •

編譯器不考慮多執行緒間的語義

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

指令重排會破壞程式間的有序性

class orderexample 

public void reader()

}}

執行緒

a首先執行

writer()

方法,執行緒b

執行緒接著執行

reader()

方法 ,執行緒b

在int

i=a+1

是不一定能看到

a已經被賦值為1

因為在writer

中,兩句話順序可能打亂。 執行緒

a可能是

flag=true

a=1 執行緒

b可能是

flag=true(

此時a=0)

防止指令重排的方法是保證執行緒的安全

指令重排的基本原則

– 程式順序原則:乙個執行緒內保證語義的序列性

– volatile規則:volatile變數的寫,先發生於讀

– 鎖規則:解鎖(unlock)必然發生在隨後的加鎖(lock)前

– 傳遞性:a先於b,b先於c 那麼a必然先於c

– 執行緒的start方法先於它的每乙個動作

– 執行緒的所有操作先於執行緒的終結(thread.join())

– 執行緒的中斷(interrupt())先於被中斷執行緒的**

– 物件的建構函式執行結束先於finalize()方法

解釋執行 – 

解釋執行以解釋方式執行位元組碼 – 

解釋執行的意思是:讀一句執行一句

編譯執行(jit)

– 將位元組碼編譯成機器碼 – 

直接執行機器碼 – 

執行時編譯 編譯

後的效能有數量級的提公升。

jvm記憶體模型 JVM記憶體模型詳情解析

一 結構圖 note string常量池 存在 堆記憶體中 二 各部分詳情解析 1 堆1 老年代 物件年齡 經過一次 monitor gc 年齡加1 15 的會存到 老年代 2 年輕代 3 常量池 string常量 儲存在堆中 2 虛擬機器棧 1 區域性變數表 2 運算元棧 3 動態鏈結 4 方法出...

jvm記憶體模型

主要分為棧,堆,方法區,程式計數器 1.程式計數器 2.棧 stack 虛擬機器棧 每個執行緒獨生成乙個棧,執行緒中每呼叫乙個方法生成乙個棧幀,棧幀依次壓棧 棧幀中存放了每個方法的基本資料變數,物件的引用,操作指令,出口資訊等 本地方法棧 存放的是native方法 其他語言寫的 其他和虛擬機器棧一樣...

JVM 記憶體模型

恢復內容開始 學習狂神說筆記 感謝狂神說的分享 私有區一定不會有垃圾 所謂jvm的調優,其實就是在調整共享區中的堆,而且大多數情況下都在調堆 從 來解釋 class test 我們程式中給定的是 public static int a 1 但是在載入過程中的步驟如下 1.載入階段 編譯檔案為 cla...