JVM是否保证不缓存不稳定变量?
程序员是否可以依赖JVM来为每个线程本地缓存非易失性变量。
或者JVM可能会也可能不会这样做,因此程序员不应该依赖于JVM。
提前感谢您的答案。
答案 0 :(得分:2)
没有。 JVM不保证非缓存字段的“缓存”。 JVM保证的哪些实现易失性字段的行为。字段缓存是非标准的(未指定),并且可以从JVM到JVM实现不同。所以,你不应该真的依赖它(即使通过某种方式发现一些数据被线程缓存)
答案 1 :(得分:0)
java语言规范非常清楚volatile:
Java编程语言提供了第二种机制volatile字段,比某些用途的锁定更方便。
字段可以声明为volatile,在这种情况下,Java Memory Model可以确保所有线程都看到变量的一致值(第17.4节)。
就是这样。你有一个特殊的关键字来定义这个特殊的语义。所以,当你想到相反的方式:没有那个特殊的关键字,你就不能依赖任何特殊的语义。然后你会得到Java Memory Model提供的东西;但仅此而已。
并且完全正确 - 当然有Unsafe,允许您以非常特殊的语义以不安全的方式篡改内存。
答案 2 :(得分:0)
如果需要字段快照,建议的模式是将其复制到本地变量。在编写大量使用原子和读取 - 修改 - 条件 - 写循环的代码时,这是commonly used。