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

weixin_34087301發表於2018-01-13

溫習《Java併發程式設計的藝術》

volatile

定義

輕量級的synchonized

在多處理器開發保證了共享變了的可見性(一個執行緒修改了一個共享變了,另外一個執行緒能夠讀取這個修改的值)

實現原理

Lock字首指令會引起處理器快取回寫到記憶體

一個處理器的快取回到記憶體會導致其他處理器的快取無效

目的

準確和一致地更新共享變數

使用優化

  • 追加位元組能優化效能

  • 為什麼追加64位元組能夠提高併發程式設計的效率呢

  • 在下面兩種情況不應該是用64位元組
    快取行非64位元組寬的處理器
    快取變數不會被頻繁地寫

synchronized

定義

作用

  • 對於普通同步形式,鎖是當前例項物件

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

  • 對於同步方法塊,鎖是synchonized括號裡配置的物件

實現原理

jvm基於進入和退出Monitor物件來實現方法同步和程式碼同步

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

頭物件

synchonized用的鎖是存在java物件頭裡的,陣列用3個字寬儲存物件頭,非陣列用2個字寬儲存物件頭

Markword 預設儲存物件的Hashcode、分代年齡、鎖標記位

鎖升級與優化

從1.6以後為了減少獲得鎖和釋放鎖帶來的效能消耗,引入了偏向鎖和輕量鎖

鎖級別從低到高

  • 無鎖狀態

  • 偏向鎖狀態

  • 輕量鎖狀態

  • 重量鎖狀態

原子操作的實現原理

其他

  • 名詞解釋

  • 記憶體屏障

  • 快取行

  • 原子操作

  • 快取行填充

  • 快取命中

  • 寫命中

  • 寫缺失

相關文章