亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

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

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

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

    阳朔县| 清河县| 如东县| 托克逊县| 哈尔滨市| 潮安县| 方正县| 肥西县| 灵武市| 长子县| 大英县| 大宁县| 鄱阳县| 施甸县| 定西市| 杭锦旗| 五莲县| 个旧市| 库车县| 崇信县| 榆中县| 门源| 鲁甸县| 庆阳市| 阿坝县| 广南县| 上林县| 华安县| 博客| 谢通门县| 沙洋县| 三门县| 焉耆| 旌德县| 鄂温| 三明市| 卓尼县| 惠安县| 会宁县| 盱眙县| 淮阳县|