Dalvik的记忆模型是否与Java's相同?我对引用和非long
/非double
原始变量的读写是否是原子的特别感兴趣,但我也想知道这两个平台的内存是否有任何差异模型。
答案 0 :(得分:60)
从4.0(冰淇淋三明治)开始,Dalvik的行为应该与JSR-133(Java内存模型)相匹配。
截至3.0(Honeycomb),大部分内容都已到位,但在实践中很难忽略一些小事(例如最终确定中的一些边缘案例)。
从2.3(Gingerbread)开始,Dalvik在单处理器上通常是正确的,但缺少在SMP硬件上正确行为所需的一些关键功能(例如,正确的final
字段处理)。
前姜饼,根本没有记忆障碍,像volatile long
这样的基本内容被打破了。
答案 1 :(得分:13)
有a document in the Dalvik source表示:
从用Java编程语言编写的代码或以相同的方式定位到.class文件的代码的角度来看,Dalvik VM的行为方式与语言的定义完全一致。也就是说,在Dalvik中运行的代码将与在任何其他虚拟机中运行的代码相同。
这应该意味着行为与正确的Java相同。无论是否真的,我都不知道。
答案 2 :(得分:0)
规范说32位数字(非双数,非长数)的所有操作都是原子的。无法保证对64位数字的操作也是原子的。