【讀書筆記】Java併發機制的底層實現原理

溫習《Java併發編程的藝術》java

volatile

定義

輕量級的synchonized編程

在多處理器開發保證了共享變了的可見性(一個線程修改了一個共享變了,另一個線程可以讀取這個修改的值)數組

實現原理

Lock前綴指令會引發處理器緩存回寫到內存緩存

一個處理器的緩存回到內存會致使其餘處理器的緩存無效併發

目的

準確和一致地更新共享變量jvm

使用優化

  • 追加字節能優化性能高併發

  • 爲何追加64字節可以提升併發編程的效率呢性能

  • 在下面兩種狀況不該該是用64字節 緩存行非64字節寬的處理器 緩存變量不會被頻繁地寫優化

synchronized

定義

做用

  • 對於普通同步形式,鎖是當前實例對象線程

  • 對於靜態同步方法,鎖是當前Class對象

  • 對於同步方法塊,鎖是synchonized括號裏配置的對象

實現原理

jvm基於進入和退出Monitor對象來實現方法同步和代碼同步

使用monitorenter和monitorexit指令實現,在編譯後插入到插入代碼

頭對象

synchonized用的鎖是存在java對象頭裏的,數組用3個字寬存儲對象頭,非數組用2個字寬存儲對象頭

Markword 默認存儲對象的Hashcode、分代年齡、鎖標記位

鎖升級與優化

從1.6之後爲了減小得到鎖和釋放鎖帶來的性能消耗,引入了偏向鎖和輕量鎖

鎖級別從低到高

  • 無鎖狀態

  • 偏向鎖狀態

  • 輕量鎖狀態

  • 重量鎖狀態

原子操做的實現原理

其餘

  • 名詞解釋

  • 內存屏障

  • 緩存行

  • 原子操做

  • 緩存行填充

  • 緩存命中

  • 寫命中

  • 寫缺失

相關文章
相關標籤/搜索