【问题标题】:Reorderings in java memory modeljava内存模型中的重新排序
【发布时间】:2014-04-28 09:14:07
【问题描述】:

重读JMM,发现有一句话没看懂:

我们在这里只考虑可读可写的变量 原子单元 -- 即没有位域、未对齐的访问或访问 大于平台上可用的字数。

任何人都可以解释上面显示的单词是粗体的情况。

【问题讨论】:

标签: java multithreading jvm


【解决方案1】:

在某些架构上,处理器可以在单个命令中执行多个内存访问:

  • 位域:设置内存的某些位;这通常使用 read-modify-write 实现,具有单独的读写访问权限。
  • 未对齐访问:在某些 CPU 体系结构上,处理器会对您在访问多字节值时可以使用的地址施加限制,尤其是当您跨越字边界时。大多数现代处理器没有这个问题,因为它们可以执行多次读取以覆盖所需的地址范围;如果您从 0x01 读取到 0x05,它将分为 0x01-0x04 和 0x05 读取。如果您需要在那里写,那就更复杂了;与对齐的地址(地址是 4 的倍数)相比,相同的区域将首先读取,然后写入,执行所需的内存操作次数的 3 倍。 (请记住,在现代 CPU 上,问题更为复杂,因为您的内存层次结构非常深,每层对齐约束不同)。

在这些情况下,一个操作需要跨越多个内存访问,因此可能会出现竞争条件,因此无法保证原子性。

【讨论】:

    猜你喜欢
    • 2011-02-04
    • 1970-01-01
    • 2021-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-01
    • 1970-01-01
    相关资源
    最近更新 更多