欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

volatile保證可見(jiàn)性及重排序方法

 更新時(shí)間:2022年08月04日 14:48:56   作者:Mark_Zoe  
這篇文章主要為大家介紹了volatile保證可見(jiàn)性及重排序方法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

一、JMM的內(nèi)存可見(jiàn)性保證

按程序類型,Java程序的內(nèi)存可見(jiàn)性保證可以分為下列3類:

單線程程序:?jiǎn)尉€程程序不會(huì)出現(xiàn)內(nèi)存可見(jiàn)性問(wèn)題。編譯器、runtime和處理器會(huì)共同確保單線程程序的執(zhí)行結(jié)果與該程序在順序一致性模型中的執(zhí)行結(jié)果相同。

正確同步的多線程程序:正確同步的多線程程序的執(zhí)行將具有順序一致性(程序的執(zhí)行結(jié)果與該程序在順序一致性內(nèi)存模型中的執(zhí)行結(jié)果相同)。這是JMM關(guān)注的重點(diǎn),JMM通過(guò)限制編譯器和處理器的重排序來(lái)為程序員提供內(nèi)存可見(jiàn)性保證。

未同步/未正確同步的多線程程序:JMM為它們提供了最小安全性保障:線程執(zhí)行時(shí)讀取到的值,要么是之前某個(gè)線程寫入的值,要么是默認(rèn)值未同步程序在JMM中的執(zhí)行時(shí),整體上是無(wú)序的,其執(zhí)行結(jié)果無(wú)法預(yù)知。 JMM不保證未同步程序的執(zhí)行結(jié)果與該程序在順序一致性模型中的執(zhí)行結(jié)果一致。

二、volatile的內(nèi)存語(yǔ)義

1、volatile的特性

可見(jiàn)性:對(duì)一個(gè)volatile變量的讀,總是能看到(任意線程)對(duì)這個(gè)volatile變量最后的寫入。

原子性:對(duì)任意單個(gè)volatile變量的讀/寫具有原子性,但類似于volatile++這種復(fù)合操作不具有原子性(基于這點(diǎn),我們通過(guò)會(huì)認(rèn)為volatile不具備原子性)。volatile僅僅保證對(duì)單個(gè)volatile變量的讀/寫具有原子性,而鎖的互斥執(zhí)行的特性可以確保對(duì)整個(gè)臨界區(qū)代碼的執(zhí)行具有原子性。

有序性:對(duì)volatile修飾的變量的讀寫操作前后加上各種特定的內(nèi)存屏障來(lái)禁止指令重排序來(lái)保障有序性。

volatile 寫-讀的內(nèi)存語(yǔ)義:

當(dāng)寫一個(gè)volatile變量時(shí),JMM會(huì)把該線程對(duì)應(yīng)的本地內(nèi)存中的共享變量值刷新到主內(nèi)存。

當(dāng)讀一個(gè)volatile變量時(shí),JMM會(huì)把該線程對(duì)應(yīng)的本地內(nèi)存置為無(wú)效,線程接下來(lái)將從主內(nèi)存中讀取共享變量。

2、volatile可見(jiàn)性實(shí)現(xiàn)原理

JMM內(nèi)存交互層面實(shí)現(xiàn):volatile修飾的變量的read、load、use操作和assign、store、write必須是連續(xù)的,即修改后必須立即同步回主內(nèi)存,使用時(shí)必須從主內(nèi)存刷新,由此保證volatile變量操作對(duì)多線程的可見(jiàn)性。

硬件層面實(shí)現(xiàn):通過(guò)lock前綴指令,會(huì)鎖定變量緩存行區(qū)域并寫回主內(nèi)存,這個(gè)操作稱為“緩存鎖定”,緩存一致性機(jī)制會(huì)阻止同時(shí)修改被兩個(gè)以上處理器緩存的內(nèi)存區(qū)域數(shù)據(jù)。一個(gè)處理器的緩存回寫到內(nèi)存會(huì)導(dǎo)致其他處理器的緩存無(wú)效。

三、指令重排序

Java語(yǔ)言規(guī)范規(guī)定JVM線程內(nèi)部維持順序化語(yǔ)義。即只要程序的最終結(jié)果與它順序化情況的結(jié)果相等,那么指令的執(zhí)行順序可以與代碼順序不一致,此過(guò)程叫指令的重排序。指令重排序的意義:JVM能根據(jù)處理器特性(CPU多級(jí)緩存系統(tǒng)、多核處理器等)適當(dāng)?shù)膶?duì)機(jī)器指令進(jìn)行重排序,使機(jī)器指令能更符合CPU的執(zhí)行特性,最大限度的發(fā)揮機(jī)器性能。在編譯器與CPU處理器中都能執(zhí)行指令重排優(yōu)化操作。

JMM內(nèi)存屏障插入策略:

  • 在每個(gè)volatile寫操作的前面插入一個(gè)StoreStore屏障
  • 在每個(gè)volatile寫操作的后面插入一個(gè)StoreLoad屏障
  • 在每個(gè)volatile讀操作的后面插入一個(gè)LoadLoad屏障
  • 在每個(gè)volatile讀操作的后面插入一個(gè)LoadStore屏障

不同硬件實(shí)現(xiàn)內(nèi)存屏障的方式不同,Java內(nèi)存模型屏蔽了這種底層硬件平臺(tái)的差異,由JVM來(lái)為不同的平臺(tái)生成相應(yīng)的機(jī)器碼。

以上就是volatile保證可見(jiàn)性及重排序方法的詳細(xì)內(nèi)容,更多關(guān)于volatile可見(jiàn)性重排序的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 一文掌握git?push命令

    一文掌握git?push命令

    git?push就是將本地的更新推送到遠(yuǎn)程別名,這篇文章主要介紹了git?push命令詳解,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-01-01
  • 使用 Conditional Menus 插件讓 WordPress 在不同頁(yè)面顯示不同菜單

    使用 Conditional Menus 插件讓 WordPress 在不同頁(yè)面顯示不同菜單

    這篇文章主要介紹了如何使WordPress在不同頁(yè)面顯示不同菜單
    2021-09-09
  • 關(guān)于圖片存儲(chǔ)格式的整理(JPEG格式介紹)

    關(guān)于圖片存儲(chǔ)格式的整理(JPEG格式介紹)

    這篇文章主要介紹了關(guān)于圖片存儲(chǔ)格式的整理(JPEG),需要的朋友可以參考下
    2016-01-01
  • VSCode插件安裝完成后的配置詳解

    VSCode插件安裝完成后的配置詳解

    這篇文章主要介紹了VSCode插件安裝完成后的配置詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-08-08
  • 在命令行用 sort 進(jìn)行排序的方法

    在命令行用 sort 進(jìn)行排序的方法

    這篇文章主要介紹了在命令行用 sort 進(jìn)行排序的方法,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-12-12
  • 使用postman進(jìn)行接口自動(dòng)化測(cè)試

    使用postman進(jìn)行接口自動(dòng)化測(cè)試

    這篇文章介紹了使用postman進(jìn)行接口自動(dòng)化測(cè)試的方法,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-06-06
  • 在WordPress中創(chuàng)建自定義頁(yè)面模板方法詳解

    在WordPress中創(chuàng)建自定義頁(yè)面模板方法詳解

    在本文中,我們將學(xué)習(xí)如何在 WordPress 中創(chuàng)建自定義頁(yè)面模板,以及我們?nèi)绾螌⒆远x模板分配給 WordPress 中的特定頁(yè)面或頁(yè)面組,感興趣的朋友跟隨小編一起看看吧
    2021-09-09
  • 詳解如何設(shè)置git命令縮寫

    詳解如何設(shè)置git命令縮寫

    這篇文章主要為大家介紹了詳解如何設(shè)置git命令縮寫,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-09-09
  • Git遠(yuǎn)程刪除某個(gè)歷史提交記錄方法詳解

    Git遠(yuǎn)程刪除某個(gè)歷史提交記錄方法詳解

    這篇文章主要為大家介紹了Git遠(yuǎn)程刪除某個(gè)歷史提交記錄方法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-06-06
  • 基于Leaflet的VideoOverlay視頻圖層疊加實(shí)戰(zhàn)教程

    基于Leaflet的VideoOverlay視頻圖層疊加實(shí)戰(zhàn)教程

    這篇文章主要介紹了基于Leaflet的VideoOverlay視頻圖層疊加實(shí)戰(zhàn),本文首先介紹了DistortableVideo組件的相關(guān)知識(shí),它的github倉(cāng)庫(kù)信息,相關(guān)源代碼的目錄說(shuō)明,使用依賴信息,需要的朋友可以參考下
    2023-02-02

最新評(píng)論