全面理解Java記憶體模型 侵立刪

2021-08-21 00:18:07 字數 388 閱讀 6440

**:

1. 首先,執行緒a把本地記憶體a中更新過的共享變數重新整理到主記憶體中去。

2. 然後,執行緒b到主記憶體中去讀取執行緒a之前已更新過的共享變數。

1. 共享物件對各個執行緒的可見性

2. 共享物件的競爭現象

指令級並行的重排序:如果不存l在資料依賴性,處理器可以改變語句對應機器指令的執行順序。

記憶體系統的重排序:處理器使用快取和讀寫緩衝區,這使得載入和儲存操作看上去可能是在亂序執行。

影響某些資料(或則是某條指令的執行結果)的記憶體可見性。

在寫入變數a之前的寫入操作,其更新的資料對於其他執行緒也是可見的。因為memory barrier會刷出cache中的所有先前的寫入。

深入理解Java記憶體模型(二) 重排序

如果兩個操作訪問同乙個變數,且這兩個操作中有乙個為寫操作,此時這兩個操作之間就存在資料依賴性。資料依賴分下列三種型別 上面三種情況,只要重排序兩個操作的執行順序,程式的執行結果將會被改變。前面提到過,編譯器和處理器可能會對操作做重排序。編譯器和處理器在重排序時,會遵守資料依賴性,編譯器和處理器不會改...

深入理解java記憶體模型(二)重排序

資料依賴性 如果兩個操作訪問同乙個變數,且這兩個操作中有乙個為寫操作,此時這兩個操作之間就存在資料依賴性。資料依賴分下列三種型別 名稱 示例 說明 寫後讀 a 1 b a 寫乙個變數之後,再讀這個位置。寫後寫 a 1 a 2 寫乙個變數之後,再寫這個變數。讀後寫 a b b 1 讀乙個變數之後,再寫...

深入理解Java記憶體模型二 重排序

如果兩個操作訪問同乙個變數,且這兩個操作中有乙個為寫操作,此時這兩個操作之間就存在資料依賴性。資料依賴分下列三種型別 上面三種情況,只要重排序兩個操作的執行順序,程式的執行結果將會被改變。前面提到過,編譯器和處理器可能會對操作做重排序。編譯器和處理器在重排序時,會遵守資料依賴性,編譯器和處理器不會改...