【发布时间】:2016-11-19 09:42:54
【问题描述】:
Java final 关键字在缓存方面的行为是什么?
引用自:jsr133-faq
对象的最终字段的值在其构造函数中设置。 假设对象是“正确”构造的,一旦对象被 构造,分配给最终字段的值 构造函数将对所有其他线程可见,而无需 同步。此外,任何其他对象的可见值 或那些最终字段引用的数组将至少为 最新的作为最终字段。
我不明白它说as up-to-date as the final fields时指的是什么。:
此外,任何其他对象或数组的可见值 这些最终字段所引用的内容将至少与 最终字段。
我的猜测是,例如:
public class CC{
private final Mutable mutable; //final field
private Other other; //non-final field
public CC(Mutable m, Other o){
mutable=m;
other=o;
}
}
当构造函数CC返回时,除了mutable的指针值之外,以m为根的对象图上的所有值,如果存在于本地处理器缓存中,将被刷新到主内存。同时,将其他处理器的本地缓存对应的缓存行标记为无效。
是这样吗?它在装配中是什么样子的?他们实际上是如何实现的?
【问题讨论】:
标签: java synchronization final