正在 64 位 VM 上写入引用原子读取/写入引用始终是原子的AtomicReference
java内存模型要求编写a是原子的:也就是说,如果你在一个线程中向它写入一个值(由4个字节组成),并在另一个线程中读取它,你将获得所有字节或无,但永远不会得到2个新字节和2个旧字节等。int
对于 不保证这一点。在这里,写入先前持有的变量可能会导致另一个线程读取或 .long
0x1122334455667788
0
0x112233440000000
0x0000000055667788
现在,规范不要求对象引用是 int 或长号。出于类型安全原因,我怀疑它们保证以原子方式写入,但在64位VM上,这些引用很可能是64位值(仅内存地址)。
现在这是我的问题:
- 是否有任何内存模型规格涵盖此内容(我没有找到)?
- 长写入是否在 64 位 VM 上被怀疑为原子写入?
- 是否强制 VM 将引用映射到 32 位?
问候, 斯蒂芬