Dalvik のメモリ モデルはJavaのメモリ モデルと同じですか? long
参照変数と非プリミティブ変数の読み取りと書き込みがアトミックかどうかに特に関心がありますdouble
が、2 つのプラットフォームのメモリ モデルに違いがあるかどうかも知りたいです。
3 に答える
4.0 (Ice Cream Sandwich) の時点で、Dalvik の動作は JSR-133 (Java メモリ モデル) と一致するはずです。
3.0 (Honeycomb) の時点で、ほとんどの部分は適切に配置されていましたが、実際に遭遇するのが難しいいくつかのマイナーなことが見落とされていました (たとえば、ファイナライズのいくつかのエッジ ケース)。
2.3 (Gingerbread) の時点で、Dalvik は一般にユニプロセッサでは適切でしたが、SMP ハードウェアで適切に動作するために必要ないくつかの重要な機能 (適切なfinal
フィールド処理など) が欠けていました。
ジンジャーブレッド以前は、メモリバリアはまったくなく、基本的なものvolatile long
は壊れていました.
Dalvik ソースには、次のようなドキュメントがあります。
Java プログラミング言語で記述された、または同じ方法で .class ファイルを対象としたコードの観点から、Dalvik VM は、言語の定義と完全に一致する方法で動作することを目指しています。つまり、Dalvik で実行されているコードは、他の仮想マシンで実行されている場合と同じように動作します。
これは、動作が適切な Java と同じであることを意味するはずです。それが実際にあるかどうか、私にはわかりません。
仕様では、32 ビットの数値 (double や long 以外の数値) に対するすべての操作はアトミックであると規定されています。64 ビット数値の操作もアトミックであるという保証はありません。