2012-03-28 14 views
3

仮想マシンは、異なるOS上でアプリケーションを実行するために使用されます(Javaは、バイトコードとして解釈されるOS独立の.classファイルにコードをコンパイルします)。アンドロイドアプリは同じOS(Androidなど)で動作するため、VMは必要ありません(私はここで間違っている可能性があります)。それからDalvik VMが必要なのはなぜですか?Androidに仮想マシン(DVM)が必要なのはなぜですか?

答えて

7

Androidプラットフォームは、ARM、MIP、およびx86の異なるアーキテクチャで実行できます。各アーキテクチャのバイナリをコンパイルする必要性を抽象化するために、VMが機能します。また、開発者のメモリ管理も行います。

2

Javaクラスをコンパイルし、インタープリターが実行できるバイトコードに変換する必要があります。

これはJVMに似ていますが、Javaコンパイラによって.classファイルにコンパイルされる.javaファイルがあります。 .classファイルは、JVMによって実行されるバイトコード以外のものです。 JVMは、どのプラットフォーム(Windows、Linux、Unix)にも置くことができます。

アンドロイドでも、ファイルは.dexファイルにコンパイルされ、DVMによって実行されます。アプリケーションがインストールされると、Android OSは一意のLinuxユーザIDを割り当て、各アプリケーションにはDVMが割り当てられます。つまり、各アプリケーションには独自のLinuxプロセス、DVM、LinuxユーザーIDがあります。

Javaファイルは、.classファイルと比較して少ないメモリを消費する.dexファイルにコンパイルされます。

ここで、10個のアプリケーションに10個の個別DVMがあり、OSに処理するプロセスが10個あるとします。

アンドロイドOSのディスパッチャーまたはスケジューラーは、これらの10個のプロセスを処理する責任があります。これがアンドロイドの活動ライフサイクルを持つ理由です。

各プロセス(各アプリケーション)の実行状態を維持するには、DVMが必要です。

1

Androidが仮想マシンを必要とするのは、GoogleがAndroid APIを使いこなし、Javaインターフェイスを大幅に使用することに基づいているからです。 Java自体は通常、仮想マシン上で実行されます。

JVM自体はスタックマシンベースのVMですが、AndroidのVM(Dalvikと呼ばれます)はレジスタベースのVMです(これは、コード生成が少なく、Androidを使用しているどのデバイスでもパフォーマンスを向上させるためです)

仮想マシンの目的は、シミュレーションによってハードウェアを抽象化できるようにすることです。仮想マシンを作成してそれをコンパイルして、可能なすべてのハードウェアで動作させると、元々はJavaを普及させたものが得られます。

仮想マシンを実行できるハードウェアでコードを変更して実行することなく、コードを記述することができます。

Androidは主にC(およびC++?)でビルドされていますが、OSを操作するAPIはJavaを介してインターフェイスされるため、仮想マシンが必要です。

関連する問題