91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

JVM運行時數據區與JMM內存模型是什么

發布時間:2022-08-01 11:17:57 來源:億速云 閱讀:147 作者:iii 欄目:開發技術

這篇“JVM運行時數據區與JMM內存模型是什么”文章的知識點大部分人都不太理解,所以小編給大家總結了以下內容,內容詳細,步驟清晰,具有一定的借鑒價值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來看看這篇“JVM運行時數據區與JMM內存模型是什么”文章吧。

    1. JVM 運行時數據區

    JVM運行時數據區可以分為元空間,堆,虛擬機棧,本地方法棧,程序計數器五大塊。

    JVM運行時數據區與JMM內存模型是什么

    • 元空間(方法區):存放類模版對象,是線程共享的區域,在磁盤上,一般不會GC

    • 堆空間:線程共享的區域,對象創建與GC的主要陣地

    • 虛擬機棧:線程私有的,基本組成單位是棧幀,每個棧幀對應一個方法,棧幀組成如下

      • 局部變量表:存放方法變量信息

      • 操作數棧:方法運行的區域

      • 動態鏈接:指向方法模板對象,與虛方法表一起實現方法重寫

      • 返回地址:方法的返回地址

    • 本地方法棧:線程私有,本地方法的執行區域

    • 程序計數器:線程私有,負責在線程上下文切換的過程中記錄線程執行到了哪個位置

    2. JMM 內存模型

    硬件內存模型

    JVM運行時數據區與JMM內存模型是什么

    通常情況下,當CPU需要讀取主存時,它會將主存的部分讀到CPU緩存中或者內部寄存器中,然后在寄存器中執行操作。當CPU需要將結果寫回到主存中去時,它會將內部寄存器的值刷新到緩存中,然后在某個時間點將值刷新回主存。

    在多處理器系統中,每個處理器都有自己的高速緩存,而它們又共享同一主內存,因此就會存在緩存一致性問題。為了解決一致性的問題,需要各個處理器訪問緩存時都遵循一些協議,在讀寫時要根據協議來進行操作,這類協議有MSI、MESI等。

    JMM

    JMM內存模型將內容分為了線程私有內存與主內存兩部分,其與我們之前提到的硬件內存模型的對應關系如下所示:

    JVM運行時數據區與JMM內存模型是什么

    私有內存與主內存的交互由如下八種操作控制:

    JVM運行時數據區與JMM內存模型是什么

    3. 可見行與 volatile 關鍵字

    一言以蔽之,volatile 關鍵字通過內存屏障的形式來阻止指令重排,以維護變量的有序性與可見行。

    一行代碼到執行的過程中要經歷以下的階段:

    JVM運行時數據區與JMM內存模型是什么

    volatile 關鍵字有如下兩個作用:

    • 保證被 volatile 修飾的共享變量對所有線程總是可見的,也就是當一個線程修改了被 volatile 修飾共享變量的值,新值總是可以被其他線程立即得知。

    • 禁止指令重排序優化。

    JVM中提供了四類內存屏障指令:

    • loadload:兩個讀取操作之間

    • storestore:兩個寫操作之間

    • loadstore:讀寫操作之間

    • storelosd:寫讀操作之間

    以上就是關于“JVM運行時數據區與JMM內存模型是什么”這篇文章的內容,相信大家都有了一定的了解,希望小編分享的內容對大家有幫助,若想了解更多相關的知識內容,請關注億速云行業資訊頻道。

    向AI問一下細節

    免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

    AI

    娱乐| 沙田区| 博湖县| 甘孜| 承德县| 新晃| 同仁县| 民权县| 即墨市| 滦平县| 田林县| 银川市| 嘉兴市| 大竹县| 宜兰市| 崇文区| 沾化县| 开封县| 沂南县| 通山县| 永州市| 宁津县| 嵊泗县| 桦川县| 黎城县| 清苑县| 西藏| 余庆县| 漯河市| 方正县| 大同市| 历史| 炉霍县| 阜阳市| 囊谦县| 获嘉县| 临西县| 沅陵县| 祥云县| 乐平市| 翁源县|