為了實現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 色彩對比度區別 無縫拼接屏...