【问题标题】:Is Dalvik's memory model the same as Java's?Dalvik 的内存模型和 Java 的一样吗?
【发布时间】:2011-06-03 01:13:15
【问题描述】:

Dalvik的内存模型和Java's一样吗?我特别感兴趣的是引用和非long/non-double原始变量的读写是否是原子的,但我也想知道两个平台的内存模型之间是否有任何差异。

【问题讨论】:

    标签: java android dalvik memory-model java-memory-model


    【解决方案1】:

    从 4.0(冰淇淋三明治)开始,Dalvik 的行为应该与 JSR-133(Java 内存模型)相匹配。

    从 3.0 (Honeycomb) 开始,大部分部件都已到位,但忽略了一些在实践中难以遇到的小问题(例如最终确定中的一些边缘情况)。

    从 2.3 (Gingerbread) 开始,Dalvik 在单处理器上通常是正确的,但缺少在 SMP 硬件上正常运行所需的一些关键功能(例如正确的final 字段处理)。

    Gingerbread 之前,根本没有记忆障碍,像volatile long 这样的基本东西被打破了。

    【讨论】:

    【解决方案2】:

    a document in the Dalvik source 说:

    从以 Java 编程语言编写或以相同方式针对 .class 文件的一段代码的角度来看,Dalvik VM 旨在以完全符合该语言定义的方式运行。也就是说,在 Dalvik 中运行的代码的行为与在任何其他虚拟机中运行的代码相同。

    这应该意味着该行为与正确的 Java 中的行为相同。不管是不是真的,我不知道。

    【讨论】:

      【解决方案3】:

      规范说对 32 位数字(非双精度、非长数字)的所有操作都是原子的。不能保证对 64 位数字的操作也是原子的。

      【讨论】:

      • 这是哪个规范?如果您指的是 Java 规范,我认为问题的重点是询问 Dalvik 是否实现了 Java 语义的那一部分。如果您指的是其他规范,有没有机会提供链接?
      猜你喜欢
      • 2011-10-21
      • 1970-01-01
      • 1970-01-01
      • 2018-09-27
      • 1970-01-01
      • 2019-12-24
      • 2019-04-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多