【发布时间】:2011-06-03 01:13:15
【问题描述】:
Dalvik的内存模型和Java's一样吗?我特别感兴趣的是引用和非long/non-double原始变量的读写是否是原子的,但我也想知道两个平台的内存模型之间是否有任何差异。
【问题讨论】:
标签: java android dalvik memory-model java-memory-model
Dalvik的内存模型和Java's一样吗?我特别感兴趣的是引用和非long/non-double原始变量的读写是否是原子的,但我也想知道两个平台的内存模型之间是否有任何差异。
【问题讨论】:
标签: java android dalvik memory-model java-memory-model
从 4.0(冰淇淋三明治)开始,Dalvik 的行为应该与 JSR-133(Java 内存模型)相匹配。
从 3.0 (Honeycomb) 开始,大部分部件都已到位,但忽略了一些在实践中难以遇到的小问题(例如最终确定中的一些边缘情况)。
从 2.3 (Gingerbread) 开始,Dalvik 在单处理器上通常是正确的,但缺少在 SMP 硬件上正常运行所需的一些关键功能(例如正确的final 字段处理)。
Gingerbread 之前,根本没有记忆障碍,像volatile long 这样的基本东西被打破了。
【讨论】:
有a document in the Dalvik source 说:
从以 Java 编程语言编写或以相同方式针对 .class 文件的一段代码的角度来看,Dalvik VM 旨在以完全符合该语言定义的方式运行。也就是说,在 Dalvik 中运行的代码的行为与在任何其他虚拟机中运行的代码相同。
这应该意味着该行为与正确的 Java 中的行为相同。不管是不是真的,我不知道。
【讨论】:
规范说对 32 位数字(非双精度、非长数字)的所有操作都是原子的。不能保证对 64 位数字的操作也是原子的。
【讨论】: