1. 程式人生 > >深入理解Java記憶體模型之系列篇

深入理解Java記憶體模型之系列篇

  • 確保對記憶體的讀-改-寫操作原子執行。在Pentium及Pentium之前的處理器中,帶有lock字首的指令在執行期間會鎖住匯流排,使得其他處理器暫時無法通過匯流排訪問記憶體。很顯然,這會帶來昂貴的開銷。從Pentium 4,Intel Xeon及P6處理器開始,intel在原有匯流排鎖的基礎上做了一個很有意義的優化:如果要訪問的記憶體區域(area of memory)在lock字首指令執行期間已經在處理器內部的快取中被鎖定(即包含該記憶體區域的快取行當前處於獨佔或以修改狀態),並且該記憶體區域被完全包含在單個快取行(cache line)中,那麼處理器將直接執行該指令。由於在指令執行期間該快取行會一直被鎖定,其它處理器無法讀/寫該指令要訪問的記憶體區域,因此能保證指令執行的原子性。這個操作過程叫做快取鎖定(cache locking),快取鎖定將大大降低lock字首指令的執行開銷,但是當多處理器之間的競爭程度很高或者指令訪問的記憶體地址未對齊時,仍然會鎖住匯流排。
  • 相關推薦

    深入理解Java記憶體模型系列

    確保對記憶體的讀-改-寫操作原子執行。在Pentium及Pentium之前的處理器中,帶有lock字首的指令在執行期間會鎖住匯流排,使得其他處理器暫時無法通過匯流排訪問記憶體。很顯然,這會帶來昂貴的開銷。從Pentium 4,Intel Xeon及P6處理器開始,intel在原有匯流排鎖的基礎上做了一個很有意

    深入理解 Java 記憶體模型》讀書筆記(下)(乾貨,萬字長文)

    0. 前提 1. 基礎 2. 重排序 3. 順序一致性 4. Volatile 5. 鎖 6. final 7. 總結 4. Volatile 4.1 VOLATILE 特性 舉個例子: publ

    深入理解 Java 記憶體模型》讀書筆記(上)(乾貨,萬字長文)

    0. 前提 1. 基礎 2. 重排序 3. 順序一致性 4. Volatile 5. 鎖 6. final 7. 總結 0. 前提 《深入理解 Java 記憶體模型》 程曉明著,該書在以前看過一

    深入理解Java記憶體模型(六)——final

    與前面介紹的鎖和volatile相比較,對final域的讀和寫更像是普通的變數訪問。對於final域,編譯器和處理器要遵守兩個重排序規則: 在建構函式內對一個final域的寫入,與隨後把這個被構造物件的引用賦值給一個引用變數,這兩個操作之間不能重排序。 初次讀一個包含

    深入理解 Java 記憶體模型》 整理

    目錄 基礎 重排序 順序一致性 鎖 final 總結 基礎 併發程式設計的模型分類 在併發程式設計需要處理的兩個關鍵問題是:執行緒之間如何通訊 和 執行緒之間如何同步。 通訊

    深入理解Java記憶體模型一————基礎

    一、 基礎 併發程式設計模型的分類 在我們併發程式設計時,常常需要考慮兩個問題:執行緒之間如何通訊和執行緒之間如何同步(此處執行緒指併發執行的活動實體)。 通訊是指執行緒之間以何種機制來交換資訊。在指令式程式設計中,執行緒之間的通訊機制有兩種:共享記憶體和訊息傳

    Java併發指南2:深入理解Java記憶體模型JMM

    一:JMM基礎與happens-before 1併發程式設計模型的分類 1.1執行緒之間如何通訊及執行緒之間如何同步 1.11執行緒之間的通訊機制 通訊:執行緒之間以何種機制來交換資訊 通訊機制有兩種:共享記憶體和訊息傳遞。 共享記憶體併發模型 執行

    深入理解JAVA記憶體模型》下載

    2018年11月01日 21:58:20 少年與貓喵 閱讀數:2 標籤: 程式設計 資料 區塊

    深入理解Java記憶體模型(四)——volatile

    volatile的特性 當我們宣告共享變數為volatile後,對這個變數的讀/寫將會很特別。理解volatile特性的一個好方法是:把對volatile變數的單個讀/寫,看成是使用同一個鎖對這些單個讀/寫操作做了同步。下面我們通過具體的示例來說明,請看下面的示例程式碼: class Vol

    深入理解Java記憶體模型(一)——基礎

    併發程式設計模型的分類 在併發程式設計中,我們需要處理兩個關鍵問題:執行緒之間如何通訊及執行緒之間如何同步(這裡的執行緒是指併發執行的活動實體)。通訊是指執行緒之間以何種機制來交換資訊。在指令式程式設計中,執行緒之間的通訊機制有兩種:共享記憶體和訊息傳遞。 在共享記憶體的併發模型裡,執行緒之

    深入理解Java記憶體模型(三)——順序一致性

    資料競爭與順序一致性保證 當程式未正確同步時,就會存在資料競爭。java記憶體模型規範對資料競爭的定義如下: 在一個執行緒中寫一個變數, 在另一個執行緒讀同一個變數, 而且寫和讀沒有通過同步來排序。 當代碼中包含資料競爭時,程式的執行往往產生違反直覺的結果(前一章的示例正是如此)。如果一

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

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

    深入理解Java記憶體模型(七)——總結

    處理器記憶體模型 順序一致性記憶體模型是一個理論參考模型,JMM和處理器記憶體模型在設計時通常會把順序一致性記憶體模型作為參照。JMM和處理器記憶體模型在設計時會對順序一致性模型做一些放鬆,因為如果完全按照順序一致性模型來實現處理器和JMM,那麼很多的處理器和編譯器優化都要被禁止,這對執行效能

    深入理解Java記憶體模型(五)——鎖

    鎖的釋放-獲取建立的happens before 關係 鎖是java併發程式設計中最重要的同步機制。鎖除了讓臨界區互斥執行外,還可以讓釋放鎖的執行緒向獲取同一個鎖的執行緒傳送訊息。下面是鎖釋放-獲取的示例程式碼: class MonitorExample { int a = 0;

    深入理解Java記憶體模型的volatile語義

    程曉明,Java軟體工程師,國家認證的系統分析師、資訊專案管理師。專注於併發程式設計。個人郵箱:[email protected]。 volatile的特性 當我們宣告共享變數為volatile後,對這個變數的讀/寫將會很特別。理解volatile特性的一個好

    [筆記][思維導圖]讀深入理解JAVA記憶體模型整理的思維導圖

    本人記憶差,整理這個思維導圖,相當於較認真的看了一遍,整個思維導圖,基本上就是對原文的拷貝。 有了層級關係。和本人自己的一些理解。由於思維導圖弄出來的圖片大於100M了。所以就放出原始檔, 更方便的

    深入理解Java記憶體模型

                      Java虛擬機器的執行時記憶體按照型別可分為5部分:Java方法區、Java棧、Native方法區、Java堆和程式計數器。 其中棧和程式計數器不能跨執行緒訪問。程式計數器:是一塊較小的記憶體空間,它可以看作是當前執行緒所執行的位元組碼的行

    BAT經典面試題,深入理解Java記憶體模型JMM

    Java 記憶體模型 Java 記憶體模型(JMM)是一種抽象的概念,並不真實存在,它描述了一組規則或規範,通過這組規範定義了

    【併發程式設計】一文帶你讀懂深入理解Java記憶體模型(面試必備)

    併發程式設計這一塊內容,是高階資深工程師必備知識點,25K起如果不懂併發程式設計,那基本到頂。但是併發程式設計內容龐雜,如何系統學

    併發程式設計原理剖析——深入理解Java記憶體模型

    通訊 通訊 是指執行緒之間以何種機制來交換資訊。在指令式程式設計中,執行緒之間的通訊機制有兩種:共享記憶體 和 訊息傳遞。 在共享記憶體的併發模型裡,執行緒之間共享程式的公共狀態,執行緒之間通過寫-讀記憶體中的公共狀態來隱式進行通訊。 在訊息傳遞的併發模型裡,執行緒之間