Java 内存模型要求写入 aint
是原子的:也就是说,如果您在一个线程中向它写入一个值(由 4 个字节组成)并在另一个线程中读取它,您将获得所有字节或没有,但永远不会获得 2 个新字节和2个旧字节左右。
对于long
. 在这里,写入之前0x1122334455667788
保存的变量0
可能会导致另一个线程读取0x112233440000000
或0x0000000055667788
.
现在规范不要求对象引用是 int 或 long-sized。出于类型安全的原因,我怀疑它们可以保证以原子方式编写,但在 64 位 VM 上,这些引用可能是非常好的 64 位值(仅仅是内存地址)。
现在这是我的问题:
- 是否有任何涵盖此的内存模型规格(我还没有找到)?
- 长写操作在 64 位虚拟机上是否具有原子性?
- 虚拟机是否强制将引用映射到 32 位?
问候, 史蒂芬