您好,登錄后才能下訂單哦!
這篇“JVM運行時數據區與JMM內存模型是什么”文章的知識點大部分人都不太理解,所以小編給大家總結了以下內容,內容詳細,步驟清晰,具有一定的借鑒價值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來看看這篇“JVM運行時數據區與JMM內存模型是什么”文章吧。
JVM運行時數據區可以分為元空間,堆,虛擬機棧,本地方法棧,程序計數器五大塊。
元空間(方法區):存放類模版對象,是線程共享的區域,在磁盤上,一般不會GC
堆空間:線程共享的區域,對象創建與GC的主要陣地
虛擬機棧:線程私有的,基本組成單位是棧幀,每個棧幀對應一個方法,棧幀組成如下
局部變量表:存放方法變量信息
操作數棧:方法運行的區域
動態鏈接:指向方法模板對象,與虛方法表一起實現方法重寫
返回地址:方法的返回地址
本地方法棧:線程私有,本地方法的執行區域
程序計數器:線程私有,負責在線程上下文切換的過程中記錄線程執行到了哪個位置
通常情況下,當CPU需要讀取主存時,它會將主存的部分讀到CPU緩存中或者內部寄存器中,然后在寄存器中執行操作。當CPU需要將結果寫回到主存中去時,它會將內部寄存器的值刷新到緩存中,然后在某個時間點將值刷新回主存。
在多處理器系統中,每個處理器都有自己的高速緩存,而它們又共享同一主內存,因此就會存在緩存一致性問題。為了解決一致性的問題,需要各個處理器訪問緩存時都遵循一些協議,在讀寫時要根據協議來進行操作,這類協議有MSI、MESI等。
JMM內存模型將內容分為了線程私有內存與主內存兩部分,其與我們之前提到的硬件內存模型的對應關系如下所示:
私有內存與主內存的交互由如下八種操作控制:
一言以蔽之,volatile 關鍵字通過內存屏障的形式來阻止指令重排,以維護變量的有序性與可見行。
一行代碼到執行的過程中要經歷以下的階段:
volatile 關鍵字有如下兩個作用:
保證被 volatile 修飾的共享變量對所有線程總是可見的,也就是當一個線程修改了被 volatile 修飾共享變量的值,新值總是可以被其他線程立即得知。
禁止指令重排序優化。
JVM中提供了四類內存屏障指令:
loadload:兩個讀取操作之間
storestore:兩個寫操作之間
loadstore:讀寫操作之間
storelosd:寫讀操作之間
以上就是關于“JVM運行時數據區與JMM內存模型是什么”這篇文章的內容,相信大家都有了一定的了解,希望小編分享的內容對大家有幫助,若想了解更多相關的知識內容,請關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。