JMM Java內存模型

一 硬件內存架構

CPU處理速度遠大於內存處理速度,因此中間設置有高速緩存(cache,可以有多級)。這樣會引發數據的一致性問題,即對於共享的數據而言,怎樣保證各個CPU拿到的一致。

解決方案:

1. 總線加鎖。優點:實現簡單;缺點:降低CPU吞吐量。

2. 緩存一致性協議(MESI)

當CPU在CACHE中操作數據時,如果該數據是共享變量,數據在CACHE讀到寄存器中,進行新修改,並更新內存數據

CACHE  LINE置無效,其他的CPU就從內存中讀數據。

 

二 JMM

JMM,即JAVA內存模型,是一種規範,是一個概念。

JMM將內存分爲兩類:共享內存(主內存)和工作內存(工作空間)。

1. 共享內存:所有線程共享的內存空間。

2. 工作內存:線程私有的內存空間。

對於引用對象而言,引用的地址放在工作內存,引用的對象放在堆中。

3. 工作方式

  • 線程修改私有數據,直接在工作空間修改
  • 線程修改共享數據,把數據複製到工作空間中去,在工作空間中修改,修改完成以後,刷新內存中的數據

三 JMM與硬件內存的對應關係

四 JMM要保證的3個特性

原子性:不可分割

可見性:線程只能操作自己工作空間中的數據,對於共享數據,有線程修改了其值,如何保證其他線程可見。

有序性:程序中的順序不一定就是執行的順序:編譯重排序、指令重排序(目的是 提高效率)

 

JMM如何保證原子性的方式: Synchronized;加鎖,使用JUC(java.util.concurrent併發包)中的鎖 lock。

JMM如何保證可見性的方式: Volatile;Synchronized;加鎖,使用JUC(java.util.concurrent併發包)中的鎖 lock。

JMM如何保證有序性: Volatile;Synchronized;Happens-before原則:

  1. 程序次序原則
  2. 鎖定原則 :後一次加鎖必須等前一次解鎖
  3. Volatile原則:霸道原則
  4. 傳遞原則:A---B ---C    A--C

五 JVM內存區域與JMM

JVM內存區域是JVM使用內存區域的一種虛擬劃分;JMM是一種規範,一種概念,面向的問題是原子性、可見性和有序性。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章