JMM volatile與記憶體屏障

2021-08-14 02:09:19 字數 1305 閱讀 1519

為了實現volatile記憶體語義,jmm會分別限制編譯器重排序和處理器重排序

1.當第乙個操作為普通的讀或寫時,如果第二個操作為volatile寫,則編譯器不能重排序這兩個操作(1,3)

2.當第乙個操作是volatile讀時,不管第二個操作是什麼,都不能重排序。這個規則確保volatile讀之後的操作不會被編譯器重排序到volatile讀之前(第二行)

3.當第乙個操作是volatile寫,第二個操作是volatile讀時,不能重排序(3,2)

4.當第二個操作是volatile寫時,不管第乙個操作是什麼,都不能重排序(第三列)

為了實現volatile的記憶體語義,編譯器在生成位元組碼時,會在指令序列中插入記憶體屏障來禁止特定型別的處理器重排序。

jmm基於保守策略的jmm記憶體屏障插入策略:

1.在每個volatile寫操作的前面插入乙個storestore屏障

2.在每個volatile寫操作的後面插入乙個sotreload屏障

3.在每個volatile讀操作的後面插入乙個loadload屏障

4.在每個volatile讀操作的後面插入乙個loadstore屏障

上圖的storestore屏障可以保證在volatile寫之前,其前面的所有普通寫操作已經對任意處理器可見了

因為storestore屏障將保障上面所有的普通寫在volatile寫之前重新整理到主記憶體

x86處理器僅僅會對寫-讀操作做重排序

因此會省略掉讀-讀、讀-寫和寫-寫操作做重排序的記憶體屏障

在x86中,jmm僅需在volatile後面插入乙個storeload屏障即可正確實現volatile寫-讀的記憶體語義

這意味著在x86處理器中,volatile寫的開銷比volatile讀的大,因為storeload屏障開銷比較大

電容屏與電阻屏的區別

它們都是一種對外界完全隔離的工作環境,不怕灰塵 水汽和油汙 可以用任何物體來觸控,可以用來寫字畫畫,這是它們比較大的優勢 電阻觸控螢幕的精度只取決於a d轉換的精度,因此都能輕鬆達到4096 4096?比較而言,五線電阻比四線電阻在保證解析度精度上還要優越,但是成本代價大,因此售價非常高。1 1四線...

橫豎屏切換導致的記憶體洩露

protected void ondestroy super.ondestroy 一般橫豎屏切換時,activity要重啟,為了避免重啟,可以在activity中屬性中加如 android configchanges orientation 然後在activity中複寫onconfiguration...

led拼接屏報價 無縫拼接屏與LED顯示屏的區別

1 技術區別 無縫拼接屏根源還是液晶技術,而led則是三原色燈珠封裝而成的單元板,發光技術完全不同。2 解析度區別 無縫拼接屏與液晶拼接屏一樣,解析度高達1920 1080,屬於邁普光彩高畫質顯示屏,而led則根據點間距的不同,其解析度也不同,但是都不如無縫拼接屏清晰。3 色彩對比度區別 無縫拼接屏...