JVM对类中的最终变量做了什么?

时间:2014-12-09 00:36:59

标签: java jvm final

JVM如何处理最终变量?

1 个答案:

答案 0 :(得分:6)

JVM规范中至少有一节关于final对内存模型的影响,对于多线程代码来说非常重要:

对象的

final个字段允许"safe publication"

  • 当构造函数退出时,所有final字段必须对所有线程可见。
  • 通过final引用访问的任何对象上的字段也保证至少与构造函数退出时一样最新。
  • 总之,这意味着可以在不同步的情况下同时访问不可变对象(所有字段都是final并且是基元或对不可变对象的引用的对象)。阅读"有效不可变"也是安全的。对象(其字段实际上不是final,但实际上永远不会更改)通过final引用。
  • 相反:如果您的对象被多个线程访问,并且您没有声明其字段final,那么您必须通过其他方式提供线程安全性。

但请注意,JVM并未强制实际终结:您可以使用反射重新分配值(这当然会破坏安全发布)。