JMM

165 阅读1分钟

Final

写final域的重排序规则

final域的重排序规则:

  1. 不允许将final域的写重排序到构造函数之外

如何实现?

  1. JMM禁止把final域的写重排序到构造器之外
  2. 编译器在final域写之后,构造函数return之前插入StoreStore屏障

读final域的重排序规则

final域的重排序规则:

  1. 在一个线程中,初次读对象引用和初次读该对象包含的final域,JMM禁止处理器重排序这两个操作。

如何实现?

  1. 编译器会在读final域操作之前加上LoadLoad屏障

happend-before