【发布时间】:2020-01-06 12:23:00
【问题描述】:
我真的想过如果尝试在 32 位平台(如 Windows 32 位或 x32 架构的处理器)中执行,实际上是 8bytes=64 位的长数据类型的 java 甚至可以运行? 我是Java的新手..所以请不要介意我的愚蠢问题... 请回答。
【问题讨论】:
标签: java
我真的想过如果尝试在 32 位平台(如 Windows 32 位或 x32 架构的处理器)中执行,实际上是 8bytes=64 位的长数据类型的 java 甚至可以运行? 我是Java的新手..所以请不要介意我的愚蠢问题... 请回答。
【问题讨论】:
标签: java
是的。根据JLS 17.7. Non-Atomic Treatment of double and long,对long 等非易失性 64 位值的单个操作将由两个 32 位操作表示。
出于 Java 编程语言内存模型的目的,对非易失性 long 或 double 值的单次写入被视为两次单独的写入:每个 32 位一半。这可能会导致线程从一次写入中看到 64 位值的前 32 位,而从另一次写入中看到后 32 位。
volatile long 和 double 值的写入和读取始终是原子的。
对引用的写入和读取始终是原子的,无论它们是作为 32 位还是 64 位值实现的。
【讨论】: