Java Virtual MachineとDalvik Virtual Machineの違いは何ですか?
DVMはレジスタベースで、低メモリで実行するように設計されており、独自のバイトコードを使用して.Dexファイルを実行します
JVMは、Javaバイトコードを使用し、JITを持つ.classファイルを実行するスタックベースです。
Javaソースコードは、Javaコンパイラによって.classファイルにコンパイルされます。その後、dx(dexer)ツール、Android SDKが.classファイルを処理しますDalvikバイトコードを含むDEXと呼ばれるファイル形式に変換されます。dxツールは、クラスに存在する冗長な情報をすべて削除します。DEXでは、アプリケーションのすべてのクラスが1つのファイルにまとめられます。 VMの複数のインスタンスが効率的に。
スタックベースのマシンは、命令を使用してスタックにデータをロードし、そのデータを操作する必要があるため、レジスタマシンよりも多くの命令が同じ高レベルコードを実装する必要がありますが、レジスタマシンの命令はソースレジスタとデスティネーションレジスタをエンコードする必要がありますしたがって、大きくなる傾向があります。
概念的には、DVMとJVMの間にアプリケーションレベルとの違いはほとんどありません。アーキテクチャ上、レジスタベースのDVMとスタックベースのJVMには大きな違いがあります。
両方ともVMコードモデルを使用します。ただし、DVMは、ほとんどのターゲットプラットフォームがすでに実行しているレジスタベースのバイトコード命令に匹敵するレジスタベースのオペコードを使用します。これには、ARMおよびMIPSから利用可能なアーキテクチャや、Intel、AMD、およびVIA Technologiesのx86互換アーキテクチャが含まれます。
GoogleはAndroidを開発し、いくつかの理由でDVMを選択しました。まず、ほとんどのJVMでライセンスの問題がありました。次に、DVMは、レジスタベースのマシンでのメモリ使用量とパフォーマンスの点でより効率的である必要があります。また、DVMは、DVMの複数のインスタンスを実行する場合により効率的であると想定されています。アプリケーションには独自のインスタンスが与えられます。したがって、複数のアクティブなアプリケーションには複数のDVMインスタンスが必要です。ほとんどのJava実装と同様に、DVMには自動ガベージコレクターがあります。
Jvmアーキテクチャはスタックベースですが、dvmアーキテクチャはレジスタベースです。スタックベースのマシンは、同じタスクに対してレジスタベースのマシンよりも多くの命令(つまり、より大きな命令セット)を必要とします。一方、レジスタベースのマシンの各命令は大きくなります。
Java仮想マシンがプログラムの実行を開始すると、ロードされたクラスファイル、プログラムがインスタンス化するオブジェクト、メソッドへのパラメーター、戻り値など、バイトコードやその他の情報を含む多くの情報を格納するためのメモリが必要です、ローカル変数、および計算の中間結果。
Java仮想マシンは、プログラムを実行するために必要なメモリをいくつかのランタイムデータ領域に編成します。
一般的に、スタックベースのマシンは命令を使用してスタックにデータをロードし、そのデータを操作する必要があるため、レジスタマシンよりも多くの命令が同じ高レベルコードを実装する必要がありますが、レジスタマシンの命令はソースをエンコードし、宛先レジスタ、したがって、より大きくなる傾向があります。
この違いは、主にVMオペコードのディスパッチが高価になる傾向があるインタープリターにとって重要であり、他の要因がJITコンパイルに関連しています。
低メモリ要件向けに最適化されているDalvikには、他の標準VMとは異なる特徴がいくつかあります>>>>>
VMはより少ないスペースを使用するためにスリム化されました--- >> Dalvikには現在ジャストインタイムコンパイラ(JIT)がありませんが、Android 2.0には、実験的なソースが含まれています(デフォルトでは無効)。定数プールは、32ビットインデックスのみを使用してインタープリターを簡素化するように変更されました。Javaバイトコード*- * *
以下は表形式の比較です(Source: Mr。Atul ):
JVMはバイトコードに基づいて動作し、dvmはモバイルプラットフォームに最適化された最適化されたバイトコードに基づいて動作します。モバイルデバイスのメモリとプロセスが少ないため、Linuxカーネルを使用しているためです。
DVMは、いくつかの点でJVMと異なります。まず、スタックベースのJVMとは異なり、レジスタベースのマシンです。また、jarファイルにバンドルされた複数のクラスファイルの代わりに、DVMは異なる構造とオペコードを持つ単一のDalvik実行可能(DEX)ファイルを使用します