【问题标题】:how java handles long and double in 32 bit architecturejava如何在32位架构中处理long和double
【发布时间】:2015-12-12 13:29:43
【问题描述】:

java如何处理32位平台的double和long,我知道java是平台无关的,那么它到底是怎么做到的。 我的查询很长一段时间以来,java是否将值作为第一个 32 位和另一个 32 位存储在一个和另一个内存位置,我们如何识别它们?

【问题讨论】:

  • 显而易见的问题:你为什么在乎?在 JVM 级别,所有这些都有明确定义的行为,剩下的就是实现细节
  • 只是我对它感兴趣..

标签: java double 32bit-64bit long-integer


【解决方案1】:

是的,Java (JVM) 存储/写入前 32 位,然后依次存储/写入接下来的 32 位。这就是为什么写入长(或者说双)字段不是线程安全的(除非它们被标记为易失性)

【讨论】:

  • @Codebender - 检查here :)。 volatile 在长/双字段的情况下确保写入的原子性
  • 似乎有可能一个线程在 long 值中读取前半部分,那么我可以得到演示代码.. 结果 #codebender..
  • @Deepaksai - 创建 2 个线程。一个将从一个长字段中读取,另一个将写入同一个长字段。把这个读/写放在一个循环中,看看会发生什么
  • @Deepaksai - 这不是 twitter 使用 @ 来称呼人们
  • 为什么volatile 会确保原子性? volatile 建立发生前的关系。如果一个线程写入前 32 位,然后 jvm 抢先停止该线程,那么另一个线程会看到这些更新的 32 位,但第二个 32 位对第二个线程没有意义。
猜你喜欢
  • 1970-01-01
  • 2010-09-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多