Java 内存模型 - 在跨越内存屏障时,究竟是什么被刷新到内存?

2022-09-03 15:15:23

我想我理解单个变量的发生前关系。如果我编写一个易失性字段,则此字段的所有后续读取都将包含此新值。写入 a 会跨越内存屏障,并将新值刷新到主内存。volatile

我仍然不清楚在所有其他情况下会发生什么 - 例如,或新的锁定。它们也跨越记忆障碍是什么意思?哪些数据从本地缓存刷新到主内存?换句话说,过境的范围有多大Thread.start()synchronizedjava.util.concurrent

一切都总是冲水吗?现在回到 ,它是否不仅仅是单个字段的冲洗?volatilevolatile


答案 1

当跨越内存屏障时,JVM 会将所有本地(在当前线程的上下文中)缓存变量与主内存同步。除此之外,它还会删除主内存中标记为脏的任何本地缓存数据。

关于易失性 - 是的,它还将本地缓存的所有内容与主存储器同步,而不仅仅是单个易失性字段(自1.5起)

http://www.javamex.com/tutorials/synchronization_volatile_java_5.shtml


答案 2