Java Memory Model文件資源整理

Lorenzo君發表於2018-08-15

1.什麼是Java記憶體模型

  Java記憶體模型描述了執行緒該如何和記憶體進行互動。多核、不同jvm實現以及不同的cpu,這是java程式碼執行的環境。如何讓這些因素對使用者透明並且保證程式執行正確是java記憶體模型需要解決的問題。

2.JSR 133

  最早的jmm是95年提出的,但是已經無法滿足需要。jsr133更新了jmm,jsr133可以參考大神 Doug Lea的文章。這篇文章是為編譯器編寫者寫的一份指南,裡面的內容很豐富,當然也很難懂。Java Concurrency In Practice的作者的文章也是非常的棒的。

3.指令重排

  學過計算機體系結構的,大概都知道現代cpu是流水線的,但是兩個指令之間會存在這依賴關係,所以需要進行優化。指令的重排(instruction reordering)就是一種優化的方式。指令重排可能是編譯器在編譯的時候就幫我們做好的,有的是jvm在執行的時候幫我們做的。

4.Double-Checked Locking is Broken

  volatile關鍵字到底做了什麼?很多人會和你說記憶體可見性,僅僅是這個嗎?那你可能需要讀一下這篇文章了。這篇文章提到了volatile還會防止指令重排。

5.Atomic包裡面的set vs lazySet

  官方關於這個方法的介紹簡直少得你懷疑人生,不過可以參考一下stack

相關文章