(PNAPLLI)読み:ダルビック外語:Dalvik品詞:商品名Androidランタイムに搭載されている独自の仮想計算機(仮想マシン)。名前ライセンス概要Java言語で書かれたAndroid用アプリケーションはコンパイルしてバイトコードになり、これをDalvikで実行する。Executable(DEX)と呼ばれる。従って、一般的なJavaバイトコードは利用しない。DalvikのバイトコードはJavaバイトコードから作成可能なため、通常はJava言語による開発が行なわれているが、理論上はそれ以外の言語での開発も可能である。特徴Javaではない仮想計算機Dalvikが使うバイトコードがJavaのものと異なる、独自設計である。このため、実際にはJava仮想マシンではない。当然ながらJava互換性テストを通っていない(そもそも通らない)ので、ライセンス的にもDalvikをJavaと名乗ることができず、つまりDalvikはJava仮想マシン(JVM)ではない。レジスター・ベースJVMとDalvikは、明確な設計方針の差が存在する。DalvikはJVMのパクリだが、単なるパクリではない。JVMは「スタック・ベース」と呼ばれ、命令処理に使用するレジスターがスタック状になっていることを特徴としていたが、Dalvikは一般的なCPUのように任意のレジスターを選択する「レジスター・ベース」となっている。仮想マシンの設計コンセプトは全く違ってはいるが、Javaプログラムからその違いを認識することはほぼない。アプリケーションプログラマーから見ると、Javaのノウハウをそのまま開発に活かせる利点があり、これがAndroidが人気を集める理由の一つとされている。レジスターマシンスタックマシンは命令が短い代わりにスタック操作の命令が必要になるため命令数が多くなる。レジスターマシンは、スタックマシンと比較して、レジスター番号などを指定する必要がある分、命令が長くなりやすい。インタープリターの場合、処理速度は命令数に概ね比例する。したがって命令数が多くなるとパフォーマンス面で不利である。Dalvikの設計者は、命令数が増えることを嫌った可能性がある。特殊性Dalvikは特殊なレジスターマシンである。レジスターは32ビット長だが、メソッドごとにスタックに積まれるようにして用意され、そのレジスター数は可変(0〜最大65535個)である。C言語のローカル変数に近い。命令はオペコードとオペランドからなり、命令長は可変長である。オペコードは8ビットで、これに必要な分だけオペランドが付加される。命令は16ビット単位にアラインメントされる。通常、65535個(表現に16ビット必要)ものレジスターを使わないが、単純に考えれば、3オペランド命令なら16ビット×3+8ビットで計56ビット(7バイト)にもなってしまう。このため、多くの命令は256個(表現に8ビット必要)や16個(表現に4ビット必要)に制限し、オペランドを短くしている。名前Dalvikは地名から採られた。Bornstein)の先祖が住んでいたとされる、アイスランドのエイヤフィヨルズル(Eyjafj〓r〓ur)にある漁村の名Dalv〓kにちなんで命名されたとする。Harmonyベースで開発された。