Dalvik仮想マシンとは
Dalvik仮想マシン(以下、Dalvik VM)は、Androidプラットフォームのために設計されたレジスタベースの仮想マシンです。
Googleのエンジニア、ダン・ボーンスタインによって開発されましたが、2014年には
Android Runtime(ART)がその役割を引き継ぎました。Dalvikは特に低メモリ環境での性能に優れており、その実装により複数のVMインスタンスが同時に動作することが可能です。
Dalvikの特徴
Dalvik VMは一見するとJava仮想マシンのように思えるかもしれませんが、動作するバイトコードがJavaバイトコードとは異なるため、厳格にはJavaと呼ぶことはできません。実際、Dalvikは公式にJava互換性テストを通過していないため、法的にもJavaという名称を使用することは許可されていません。この点は特筆すべきです。
Dalvikを利用するためには、Android SDKに含まれる`dx`ツールを使用して、Javaで書かれたコードを別の形式である'.dex'フォーマットに変換する必要があります。これは、開発者が既存のJavaのクラスファイルをAndroid環境で使用できるようにするためのプロセスです。
名前の由来
Dalvikの名称は、ボーンスタインの先祖が居住していたアイスランドのダルビック(Dalvík)という漁村に由来しています。このように、技術的な背景だけでなく、文化的な要素も含まれています。
アーキテクチャの概要
Dalvik VMは、低いメモリ使用量を維持するために、一般的なJava VMとは異なるアーキテクチャを採用しています。これは、システムリソースが限られている
携帯電話において特に重要な特徴です。
- - メモリ使用の最適化:Dalvikは、サポートされる機能を最小限に抑えることでメモリ使用量を削減しています。標準のCライブラリは新たに実装され、C++実装については例外処理機能を省くことで、さらにメモリフットプリントを小さくしています。
- - 定数プールの改良:Dalvikの定数プールはインデックスを32ビットの形式でしか使用しないように設計されています。これにより、インタプリタがシンプルに保たれています。
- - ジャストインタイムコンパイル:初期のDalvik VM(Android 2.1までは)にはジャストインタイム(JIT)コンパイル機能がありませんでしたが、Android 2.2からはこの機能が導入され、パフォーマンスが向上しました。
- - .dexフォーマットの利点と制約:新しい.dexフォーマットは、アーキテクチャを簡潔に保ちながらも、多くの制約が伴います。このため、Dalvik VMで動的プログラミング言語を実行することや、JITコンパイルを実現するのが難しい状況です。
開発者に対する配慮
Dalvik VMは、
携帯電話メーカーがコアのVMを改変することを可能にする工夫がされています。この改変ができるのは、Apache Harmonyという
ソフトウェアのサブセットを基礎とし、OpenJDKを使用しないためです。これにより、ソースコードを公開せずに独自のバージョンを開発することが可能になっています。
これらの特徴により、DalvikはAndroidアプリケーションの実行環境として特化された存在となり、さまざまなスマートフォンやデバイスでの適応を実現してきましたが、最終的には新たなARTへの移行が進みました。