Dalvik的内存模型与Java相同吗? 我特别想知道对引用和非long
/非double
原始变量的读写是否是原子操作,但我也想知道这两个平台的内存模型是否有任何差异。
Dalvik的内存模型与Java相同吗? 我特别想知道对引用和非long
/非double
原始变量的读写是否是原子操作,但我也想知道这两个平台的内存模型是否有任何差异。
从4.0版本(冰激凌三明治)开始,Dalvik的行为应该与JSR-133(Java内存模型)相匹配。
从3.0版本(蜂巢)开始,大部分功能已经到位,但一些小问题被忽视了,在实践中很难遇到(例如,某些终止边缘情况)。
在2.3版本(姜饼)中,单处理器上的Dalvik基本上是正确的,但一些关键特性需要适当的SMP硬件支持(例如,适当的final
字段处理)。
Gingerbread之前,根本没有内存屏障,基本的东西像volatile long
都是有问题的。
在Dalvik源代码中有一个文档,链接在此,其中写道:
从用Java编写的代码或针对.class文件的代码的角度来看,Dalvik虚拟机旨在以完全符合语言定义的方式运行。也就是说,在Dalvik中运行的代码与在任何其他虚拟机中运行的代码的行为是相同的。
这意味着它应该与正确的Java表现相同。它实际上是否如此,我不知道。