<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    少年阿賓

    那些青春的歲月

      BlogJava :: 首頁(yè) :: 聯(lián)系 :: 聚合  :: 管理
      500 Posts :: 0 Stories :: 135 Comments :: 0 Trackbacks

    Java 內(nèi)存模型

    由于 ConcurrentHashMap 是建立在 Java 內(nèi)存模型基礎(chǔ)上的,為了更好的理解 ConcurrentHashMap,讓我們首先來(lái)了解一下 Java 的內(nèi)存模型。

    Java 語(yǔ)言的內(nèi)存模型由一些規(guī)則組成,這些規(guī)則確定線程對(duì)內(nèi)存的訪問(wèn)如何排序以及何時(shí)可以確保它們對(duì)線程是可見的。下面我們將分別介紹 Java 內(nèi)存模型的重排序,內(nèi)存可見性和 happens-before 關(guān)系。

    重排序

    內(nèi)存模型描述了程序的可能行為。具體的編譯器實(shí)現(xiàn)可以產(chǎn)生任意它喜歡的代碼 -- 只要所有執(zhí)行這些代碼產(chǎn)生的結(jié)果,能夠和內(nèi)存模型預(yù)測(cè)的結(jié)果保持一致。這為編譯器實(shí)現(xiàn)者提供了很大的自由,包括操作的重排序。

    編譯器生成指令的次序,可以不同于源代碼所暗示的“顯然”版本。重排序后的指令,對(duì)于優(yōu)化執(zhí)行以及成熟的全局寄存器分配算法的使用,都是大有脾益的,它使得程序在計(jì)算性能上有了很大的提升。

    重排序類型包括:

    • 編譯器生成指令的次序,可以不同于源代碼所暗示的“顯然”版本。
    • 處理器可以亂序或者并行的執(zhí)行指令。
    • 緩存會(huì)改變寫入提交到主內(nèi)存的變量的次序。

    內(nèi)存可見性

    由于現(xiàn)代可共享內(nèi)存的多處理器架構(gòu)可能導(dǎo)致一個(gè)線程無(wú)法馬上(甚至永遠(yuǎn))看到另一個(gè)線程操作產(chǎn)生的結(jié)果。所以 Java 內(nèi)存模型規(guī)定了 JVM 的一種最小保證:什么時(shí)候?qū)懭胍粋€(gè)變量對(duì)其他線程可見。

    在現(xiàn)代可共享內(nèi)存的多處理器體系結(jié)構(gòu)中每個(gè)處理器都有自己的緩存,并周期性的與主內(nèi)存協(xié)調(diào)一致。假設(shè)線程 A 寫入一個(gè)變量值 V,隨后另一個(gè)線程 B 讀取變量 V 的值,在下列情況下,線程 B 讀取的值可能不是線程 A 寫入的最新值:

    • 執(zhí)行線程 A 的處理器把變量 V 緩存到寄存器中。
    • 執(zhí)行線程 A 的處理器把變量 V 緩存到自己的緩存中,但還沒有同步刷新到主內(nèi)存中去。
    • 執(zhí)行線程 B 的處理器的緩存中有變量 V 的舊值。

    Happens-before 關(guān)系

    happens-before 關(guān)系保證:如果線程 A 與線程 B 滿足 happens-before 關(guān)系,則線程 A 執(zhí)行動(dòng)作的結(jié)果對(duì)于線程 B 是可見的。如果兩個(gè)操作未按 happens-before 排序,JVM 將可以對(duì)他們?nèi)我庵嘏判颉?/p>

    下面介紹幾個(gè)與理解 ConcurrentHashMap 有關(guān)的 happens-before 關(guān)系法則:

    1. 程序次序法則:如果在程序中,所有動(dòng)作 A 出現(xiàn)在動(dòng)作 B 之前,則線程中的每動(dòng)作 A 都 happens-before 于該線程中的每一個(gè)動(dòng)作 B。
    2. 監(jiān)視器鎖法則:對(duì)一個(gè)監(jiān)視器的解鎖 happens-before 于每個(gè)后續(xù)對(duì)同一監(jiān)視器的加鎖。
    3. Volatile 變量法則:對(duì) Volatile 域的寫入操作 happens-before 于每個(gè)后續(xù)對(duì)同一 Volatile 的讀操作。
    4. 傳遞性:如果 A happens-before 于 B,且 B happens-before C,則 A happens-before C。
    posted on 2015-03-22 12:40 abin 閱讀(1091) 評(píng)論(0)  編輯  收藏 所屬分類: JVM
    主站蜘蛛池模板: 久久综合亚洲色HEZYO国产| 在线毛片片免费观看| 久久久久亚洲AV无码专区首| 亚洲免费网站观看视频| 免费在线观看视频a| 国产亚洲精品美女2020久久| 久久精品国产精品亚洲蜜月 | 国产成人免费手机在线观看视频| 精品多毛少妇人妻AV免费久久| 亚洲人AV在线无码影院观看| 久久精品国产精品亚洲色婷婷| 免费在线一级毛片| 午夜精品在线免费观看| 无码永久免费AV网站| 222www免费视频| 久久久久成人精品免费播放动漫| 国产亚洲视频在线观看| 久久亚洲欧美国产精品| 亚洲一区二区三区高清在线观看| 亚洲精品动漫在线| 亚洲国产成人超福利久久精品| 亚洲视频在线不卡| 亚洲av日韩av无码av| 亚洲日韩一区精品射精| 亚洲综合小说另类图片动图 | 免费观看AV片在线播放| 特级做A爰片毛片免费69| 女人被弄到高潮的免费视频 | 日韩精品免费一线在线观看| 成人特级毛片69免费观看| 皇色在线免费视频| 久久99国产综合精品免费| 三年片在线观看免费大全| 暖暖日本免费在线视频 | 边摸边脱吃奶边高潮视频免费| 视频一区在线免费观看| 最近中文字幕高清免费中文字幕mv | 一区二区在线免费观看| 国产在线国偷精品产拍免费| 久久精品国产亚洲5555| 亚洲成A∨人片在线观看无码|