欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

Java內存模型怎么理解

這篇文章主要介紹“Java內存模型怎么理解”,在日常操作中,相信很多人在Java內存模型怎么理解問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”Java內存模型怎么理解”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

創(chuàng)新互聯(lián)公司-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設、高性價比商南網(wǎng)站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫,直接使用。一站式商南網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設找我們,業(yè)務覆蓋商南地區(qū)。費用合理售后完善,十載實體公司更值得信賴。

為什么要有內存模型?

要想回答這個問題,我們需要先弄懂傳統(tǒng)計算機硬件內存架構。好了,我要開始畫圖了。

硬件內存架構

Java內存模型怎么理解

(1)CPU

去過機房的同學都知道,一般在大型服務器上會配置多個CPU,每個CPU還會有多個核,這就意味著多個CPU或者多個核可以同時(并發(fā))工作。如果使用Java  起了一個多線程的任務,很有可能每個 CPU 都會跑一個線程,那么你的任務在某一刻就是真正并發(fā)執(zhí)行了。

(2)CPU Register

CPU Register也就是 CPU 寄存器。CPU 寄存器是 CPU 內部集成的,在寄存器上執(zhí)行操作的效率要比在主存上高出幾個數(shù)量級。

(3)CPU Cache Memory

CPU Cache Memory也就是 CPU 高速緩存,相對于寄存器來說,通常也可以成為 L2  二級緩存。相對于硬盤讀取速度來說內存讀取的效率非常高,但是與 CPU 還是相差數(shù)量級,所以在 CPU 和主存間引入了多級緩存,目的是為了做一下緩沖。

(4)Main Memory

Main Memory 就是主存,主存比 L1、L2 緩存要大很多。

注意:部分高端機器還有 L3 三級緩存。

緩存一致性問題

由于主存與 CPU 處理器的運算能力之間有數(shù)量級的差距,所以在傳統(tǒng)計算機內存架構中會引入高速緩存來作為主存和處理器之間的緩沖,CPU  將常用的數(shù)據(jù)放在高速緩存中,運算結束后 CPU 再講運算結果同步到主存中。

使用高速緩存解決了 CPU 和主存速率不匹配的問題,但同時又引入另外一個新問題:緩存一致性問題。

Java內存模型怎么理解

在多CPU的系統(tǒng)中(或者單CPU多核的系統(tǒng)),每個CPU內核都有自己的高速緩存,它們共享同一主內存(Main  Memory)。當多個CPU的運算任務都涉及同一塊主內存區(qū)域時,CPU 會將數(shù)據(jù)讀取到緩存中進行運算,這可能會導致各自的緩存數(shù)據(jù)不一致。

因此需要每個 CPU 訪問緩存時遵循一定的協(xié)議,在讀寫數(shù)據(jù)時根據(jù)協(xié)議進行操作,共同來維護緩存的一致性。這類協(xié)議有 MSI、MESI、MOSI、和  Dragon Protocol 等。

處理器優(yōu)化和指令重排序

為了提升性能在 CPU 和主內存之間增加了高速緩存,但在多線程并發(fā)場景可能會遇到緩存一致性問題。那還有沒有辦法進一步提升 CPU  的執(zhí)行效率呢?答案是:處理器優(yōu)化。

為了使處理器內部的運算單元能夠最大化被充分利用,處理器會對輸入代碼進行亂序執(zhí)行處理,這就是處理器優(yōu)化。

除了處理器會對代碼進行優(yōu)化處理,很多現(xiàn)代編程語言的編譯器也會做類似的優(yōu)化,比如像 Java 的即時編譯器(JIT)會做指令重排序。

Java內存模型怎么理解

處理器優(yōu)化其實也是重排序的一種類型,這里總結一下,重排序可以分為三種類型:

  • 編譯器優(yōu)化的重排序。編譯器在不改變單線程程序語義放入前提下,可以重新安排語句的執(zhí)行順序。

  • 指令級并行的重排序?,F(xiàn)代處理器采用了指令級并行技術來將多條指令重疊執(zhí)行。如果不存在數(shù)據(jù)依賴性,處理器可以改變語句對應機器指令的執(zhí)行順序。

  • 內存系統(tǒng)的重排序。由于處理器使用緩存和讀寫緩沖區(qū),這使得加載和存儲操作看上去可能是在亂序執(zhí)行。

并發(fā)編程的問題

上面講了一堆硬件相關的東西,有些同學可能會有點懵,繞了這么大圈,這些東西跟 Java 內存模型有啥關系嗎?不要急咱們慢慢往下看。

熟悉 Java  并發(fā)的同學肯定對這三個問題很熟悉:『可見性問題』、『原子性問題』、『有序性問題』。如果從更深層次看這三個問題,其實就是上面講的『緩存一致性』、『處理器優(yōu)化』、『指令重排序』造成的。

Java內存模型怎么理解

緩存一致性問題其實就是可見性問題,處理器優(yōu)化可能會造成原子性問題,指令重排序會造成有序性問題,你看是不是都聯(lián)系上了。

出了問題總是要解決的,那有什么辦法呢?首先想到簡單粗暴的辦法,干掉緩存讓 CPU  直接與主內存交互就解決了可見性問題,禁止處理器優(yōu)化和指令重排序就解決了原子性和有序性問題,但這樣一夜回到解放前了,顯然不可取。

所以技術前輩們想到了在物理機器上定義出一套內存模型, 規(guī)范內存的讀寫操作。內存模型解決并發(fā)問題主要采用兩種方式:限制處理器優(yōu)化和使用內存屏障。

Java 內存模型

同一套內存模型規(guī)范,不同語言在實現(xiàn)上可能會有些差別。接下來著重講一下 Java 內存模型實現(xiàn)原理。

Java 運行時內存區(qū)域與硬件內存的關系

了解過 JVM 的同學都知道,JVM 運行時內存區(qū)域是分片的,分為棧、堆等,其實這些都是 JVM  定義的邏輯概念。在傳統(tǒng)的硬件內存架構中是沒有棧和堆這種概念。

Java內存模型怎么理解

從圖中可以看出棧和堆既存在于高速緩存中又存在于主內存中,所以兩者并沒有很直接的關系。

Java 線程與主內存的關系

Java 內存模型是一種規(guī)范,定義了很多東西:

  • 所有的變量都存儲在主內存(Main Memory)中。

  • 每個線程都有一個私有的本地內存(Local Memory),本地內存中存儲了該線程以讀/寫共享變量的拷貝副本。

  • 線程對變量的所有操作都必須在本地內存中進行,而不能直接讀寫主內存。

  • 不同的線程之間無法直接訪問對方本地內存中的變量。

看文字太枯燥了,我又畫了一張圖:

Java內存模型怎么理解

線程間通信

如果兩個線程都對一個共享變量進行操作,共享變量初始值為 1,每個線程都變量進行加 1,預期共享變量的值為 3。在 JMM 規(guī)范下會有一系列的操作。

Java內存模型怎么理解

為了更好的控制主內存和本地內存的交互,Java 內存模型定義了八種操作來實現(xiàn):

  • lock:鎖定。作用于主內存的變量,把一個變量標識為一條線程獨占狀態(tài)。

  • unlock:解鎖。作用于主內存變量,把一個處于鎖定狀態(tài)的變量釋放出來,釋放后的變量才可以被其他線程鎖定。

  • read:讀取。作用于主內存變量,把一個變量值從主內存?zhèn)鬏數(shù)骄€程的工作內存中,以便隨后的load動作使用

  • load:載入。作用于工作內存的變量,它把read操作從主內存中得到的變量值放入工作內存的變量副本中。

  • use:使用。作用于工作內存的變量,把工作內存中的一個變量值傳遞給執(zhí)行引擎,每當虛擬機遇到一個需要使用變量的值的字節(jié)碼指令時將會執(zhí)行這個操作。

  • assign:賦值。作用于工作內存的變量,它把一個從執(zhí)行引擎接收到的值賦值給工作內存的變量,每當虛擬機遇到一個給變量賦值的字節(jié)碼指令時執(zhí)行這個操作。

  • store:存儲。作用于工作內存的變量,把工作內存中的一個變量的值傳送到主內存中,以便隨后的write的操作。

  • write:寫入。作用于主內存的變量,它把store操作從工作內存中一個變量的值傳送到主內存的變量中。

注意:工作內存也就是本地內存的意思。

到此,關于“Java內存模型怎么理解”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續(xù)學習更多相關知識,請繼續(xù)關注創(chuàng)新互聯(lián)網(wǎng)站,小編會繼續(xù)努力為大家?guī)砀鄬嵱玫奈恼拢?/p>

網(wǎng)頁標題:Java內存模型怎么理解
轉載源于:http://aaarwkj.com/article12/igspdc.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供域名注冊、虛擬主機、動態(tài)網(wǎng)站企業(yè)網(wǎng)站制作網(wǎng)頁設計公司、網(wǎng)站導航

廣告

聲明:本網(wǎng)站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經(jīng)允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)

外貿網(wǎng)站制作
国产成人综合精品久久| 一个人看的视频天堂色| 国产成人av中文字暮在线| 国产特级黄色片免费看| 在线播放亚洲一区二区三区| 毛片一区二区三区免费看| 91久久精品国产一区| 免费看真人性生活视频| 扒开少妇毛茸茸的大荫萍蒂| 国产又粗又长又猛又爽视频| 成人在线午夜免费视频| 精品福利视频蜜臀91| 韩国av毛片在线播放| 日日躁夜夜躁狠狠躁欧美| 欧美激情性国产精品潮| 亚洲少妇熟女一区二区三区| 国产精品一区二区夜夜夜| 手机在线观看午夜小视频| 青青草原在线免费视频| 日韩精品视频在线观看| 久草午夜福利视频免费观看| 91九色国产成人久久精品| 欧美亚洲另类在线第一页| 亚洲老熟女老妇老女人| 欧美精品在,欧美一区二区| 亚洲国产男同日韩小鲜肉| 色婷婷综合五月在线观看| 亚洲全乱码精品一区二区| 亚洲91无专砖码高清观看| 国产成年人免费小视频| av中文字幕熟妇人妻少妇| 亚洲永久免费黄色av| 91久久国产综合久久91| 国产成人精品亚洲日本片| 91精品国产综合久蜜臂| 精品人妻一区二区三区不卡| 视频免费观看网站不卡| 日韩女同性一区二区三区| 91最新精品丝袜国产在线| 日本女优邻居人妻中文字幕| 女人的天堂av免费在线观看|