中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

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

如何淺析CPU高速緩存和JVM內存模型

發布時間:2021-10-23 16:08:47 來源:億速云 閱讀:268 作者:柒染 欄目:大數據

本篇文章為大家展示了如何淺析CPU高速緩存和JVM內存模型,內容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。

如何淺析CPU高速緩存和JVM內存模型

在java學習過程中,JVM的內存模型是非常重要的,今天,我們通過學習計算機的內存模型來幫助我們理解JVM內存。

一、計算機存儲介質:

如何淺析CPU高速緩存和JVM內存模型

圖一:計算機的簡化存儲介質

(1)、計算機中幾種存儲介質分類:

        a.從下往上,硬盤、內存、緩存、寄存器;
        b.高速緩存的訪問讀取速度大概為:1~X ns,
        c.主存的讀取速度:100ns
        d.硬盤的讀取速度:Xms

        e.一般情況下高速緩存的訪問速度是主存的 10~100 倍,而主存的訪問速度則是硬盤的 1~10W 倍;

(2)、機械硬的讀取訪問時間分析:
        a.尋道時間: 是指將讀寫磁頭移動至正確的磁道上所需要的時間。平均尋道時間大致為 3-15ms。
        b.旋轉延遲時間: 盤片旋轉將請求數據所在扇區移至讀寫磁頭下方所需要的時間。旋轉延遲取決于磁盤轉速,通常使用磁盤旋轉一周所需時間的 1/2 表示。比如,7200 rpm 的磁盤平均旋轉延遲大約為 60 * 1000 / 7200 / 2 = 4.17ms,而轉速為 15000 rpm 的磁盤其平均旋轉延遲為 2ms。
        c.數據傳輸時間: 完成傳輸所請求的數據所需要的時間,它取決于數據傳輸率,其值等于數據大小除以數據傳輸率。目前 IDE/ATA 能達到 133MB/s,SATA II 可達到 300MB/s 的接口數據傳輸率。數據傳輸時間通常遠小于前兩部分消耗時間。簡單計算時可忽略。

(3)、擴展了解:順序讀取和隨機讀取
        機械硬盤的磁頭移動至正確的磁道上需要時間,隨機讀寫時,磁頭不停的移動,時間都花在了磁頭尋道上,導致的就是性能不高。所以,對于機械硬盤來說,連續讀寫性很好,但隨機讀寫性能很差。

(4)、局部性原理與磁盤預讀
        由于存儲介質的特性,硬盤本身存取就比主存慢很多,再加上機械運動耗費,硬盤的存取速度往往是主存的幾百分分之一,因此為了提高效率,要盡量減少磁盤 I/O。由于磁盤順序讀取的效率很高(不需要尋道時間,只需很少的旋轉時間),因此對于具有局部性的程序來說,預讀可以提高 I/O 效率。磁盤往往也不是嚴格按需讀取,而是每次都會預讀,即使只需要一個字節,磁盤也會從這個位置開始,順序向后讀取一定長度的數據放入內存。這樣做的理論依據是計算機科學中著名的局部性原理:當一個數據被用到時,其附近的數據也通常會馬上被使用。

備注:擴展知識其實是和高性能Mysql的讀寫效率有關,大家可以擴展研究一下。 

二、CPU高速緩存

(1)、關于高速緩存的幾個問題

    a.什么是CPU高速緩存:CPU與內存之間的臨時存儲器
    b.為什么需要CPU高速緩存:
        1、它的容量比內存小的多但是交換速度卻比內存要快得多。

        2、高速緩存的出現主要是為了解決CPU運算速度與內存讀寫速度不匹配的矛盾,因為CPU運算速度要比內存讀寫速度快很多,這樣會使CPU花費很長時間等待數據到來或把數據寫入內存。在緩存中的數據是內存中的一小部分,但這一小部分是短時間內CPU即將訪問的,當CPU調用大量數據時,就可先緩存中調用,從而加快讀取速度。
    c.高速緩存模型
         cpu緩存行->一級緩存->二級緩存->三級緩存->主存;

    d.多線程下的緩存一致性問題:

緩存一致性協議。最出名的就是Intel 的MESI協議,MESI協議保證了每個緩存中使用的共享變量的副本是一致的。它核心的思想是:當CPU寫數據時,如果發現操作的變量是共享變量,即在其他CPU中也存在該變量的副本,會發出信號通知其他CPU將該變量的緩存行置為無效狀態,因此當其他CPU需要讀取這個變量時,發現自己緩存中緩存該變量的緩存行是無效的,那么它就會從內存重新讀取。
(2)、多CPU緩存與多線程緩存讀寫
      1.每個cpu有自己單獨的高速緩存區
      2.訪問跨cpu緩存數據很慢,當跨cup1訪問另一個cpu2數據時,會把cpu2中的數據copy到cpu2中保留一個副本.
      3.多個cpu緩存內可能包含相同的數據緩存行
      4.cpu如果修改緩存行數據,將發出一個RFO(Request For Owner)請求, 獲取這行數據的權限,對次行數據進行標識,其它cpu線程無法對此行數據進行操作
      5.如果cpu數據變量副本引用的值發生變化,計算機會強制刷新引用此數據的各個cpu對應的緩存行,保證緩存行數據統一
      6.緩存行數據更新不是以包含變量為最小單位,是以緩存行為最小單位。若緩存行包含了n個數據,其中一個的值被改變,那么整個緩存的其它n-1個值得都要重新加載

如何淺析CPU高速緩存和JVM內存模型

  圖二:多CPU緩存讀寫

(3)、多CPU讀取過程:
      1.緩存行變量數據 x,y,而且在其它cup緩存保存副本(cpu1,cpu2...)
      2.cpu1修改x,cpu2修改y
      3.cpu1首先獲得執行權,修改x值成功
      4.x值刷新會主內存
      5.cpu2 x,y對應緩存行置為無效
      6.cpu2..... 緩存行從內存獲取最新x,y值
      7.cpu2獲得執行權,修改y成功
      8.cpu1 緩存行重復4-6

三、了解JVM的內存模型:

如何淺析CPU高速緩存和JVM內存模型

圖三:JVM內存模型

        根據計算機的內存模型,可以簡單的想象一下JVM的內存模型設計,是不是同樣需要一個主存,一個高速緩存,和一個CPU處理器。

JVM運行時的數據區的內存模型
<1>.線程數據共享區:方法區和堆
<2>.線程數據隔離區:每個線程都有一個獨立的內存:棧,程序計數器(PC寄存器),本地方法棧;
(a).堆:存放的是運行時new出來的對象,數組,以及實例變量。堆中的內存分配還可以更加細化,由于jvm的垃圾回收分代收集算法,又將堆內存分為年輕代,老年代和永久代內存區;
       年輕代:分為Eden和兩個Serivious 區:可以通過參數配置來分配新生代的大小-Xmn
       老年代:是多次YoungGC 還存活的對象,會被移動到老年代;
       永久代:一些大對象,無法被GC的,會存放到永久代;
      所以堆對應上的就相當于計算機的主存,所有的對象信息都會存儲到這里。
(b).方法區:存放的是java類的元信息,數據結構,類的信息,和初始化的靜態變量。方法區可以看作一個計算機三級緩存,程序的執行都會依賴獲取類信息
(c).本地方法棧:本地方法的調用信息,相當于一個CUP的三級緩存
(d).棧內存:每個線程運行都會有獨立的棧內存空間,主要存儲的是程序運行時的對象引用和一些基本類型的變量信息,還有一個地址信息。所以棧內存相當于高速緩存中的一級緩存;

    1、一個線程會有單獨的棧幀,線程之間互相不干擾
    2、棧內存中存放的都是基本類型和對象的句柄。
    3、存取速度比堆內存塊,僅次于寄存器
    4、棧溢出:遞歸調用,內存不夠新建棧幀,StackOverflowError

    5.棧內存溢出:OutOfMemoryError,不夠新建線程

(e).程序計數器:一些JVM的操作指令信息。相當于CPU處理器

不對的地方,煩請指正

如何淺析CPU高速緩存和JVM內存模型

圖四、JVM內存模型

上述內容就是如何淺析CPU高速緩存和JVM內存模型,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注億速云行業資訊頻道。

向AI問一下細節

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

AI

尤溪县| 合山市| 松潘县| 巴塘县| 马关县| 错那县| 昌黎县| 乌鲁木齐县| 白山市| 林周县| 固镇县| 武安市| 远安县| 高雄市| 华宁县| 扬州市| 安龙县| 稷山县| 抚远县| 汶上县| 碌曲县| 清苑县| 盘锦市| 尼勒克县| 城市| 紫阳县| 安阳县| 汾阳市| 泽普县| 湖南省| 奇台县| 泰安市| 淳化县| 保德县| 独山县| 清水河县| 彭山县| 法库县| 泸水县| 连南| 榆社县|