(十)關於final實現的底層原理

(1)對於final域,編譯器和處理器要遵守兩個重排序規則

  1. 在構造函數內對一個final域的寫入,與隨後把這個被構造對象的引用賦值給一個引用變量,這兩個操作之間不能重排序
  2. 初次讀一個包含final域的對象的引用,與隨後初次讀這個final域,這兩個操作之間不能重排序。

(2)寫final域的重排序規則禁止把final域的寫重排序到構造函數之外。這個規則的實現包含兩個方面

  1. JMM禁止編譯器把final域的寫重排序到構造函數之外。
  2. 編譯器會在final域的寫之後,構造函數return之前,插入一個StoreStore屏障。這個屏障禁止處理器把final域的寫重排序到構造函數之外
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章