Dalvik仮想マシンと仮想マシンのアート

Dalvik仮想マシン

DVMは、すべてのプログラムは、Androidのシステムプロセス上で実行されている、のDalvik仮想マシンの頭字語はAndroid4.4で、仮想マシンが以前に使用している、のDalvik仮想マシンインスタンスへの各プロセスに相当します。

DVMとJVMの違い

  1. 別のバイトコード実行
    • Javaバイトコードを実行しているJava仮想マシンは、仮想マシンがのDalvikのDalvikバイトコードを実行されています
     JVM: .java -> javac -> .class -> jar -> .jar 
     DVM: .java -> javac -> .class -> dx.bat -> .dex 
    • Dalvik実行小さな
      クラスファイルにクラスファイルの参照の他の方法は、メソッドシグネチャは、そのクラス・ファイルにコピーする場合は一般的には、Javaクラスファイルは、すなわち、異なる方法の署名を複数含みます彼は、異なる複数のクラスも同じように、文字列定数の大多数は、クラスファイルが複数で再利用され、同じシグネチャのメソッドが含まれていると述べました。これらの冗長な情報は、直接ファイルのサイズを大きくするだけでなく、真剣に、仮想マシンの構文解析ファイルの効率に影響を与えます。
      アンドリュースのDalvik仮想マシンを使用して、DXは、バイトコードを変換するための責任SDKツールでありJAVAはのDalvik、DXツールJavaクラスファイルがどこ冗長性を排除し、すべてのJavaクラスファイルの定数プールの分解を並べ替えるバイトコードされます同じ文字列定数は、このように、ファイルサイズを小さく、一度だけDEXファイルに表示されるように、定数プール、すべての共有と同じクラスファイルの定数プールを形成するために再結合された情報、。
  2. 異なるアーキテクチャに基づいて、
    DVMは、レジスタベースので、命令が第2のアドレスと混合3つのアドレスであることを、命令はオペランドのアドレスを指定し、JVMスタックはベース、ゼロアドレス、オペランドターゲット命令デフォルトオペランドスタックであるコマンドいくつかの場所インチ しかし、送信元アドレスと宛先アドレスを指定し、したがって、より多くの命令空間を必要とする必要があるため、命令レジスタに基づきます。

    Java仮想マシンスタックベースのアーキテクチャ。仮想マシンがスタックまたは書き込みデータから、実行時に頻繁に読み取りプログラムを必要とし、このプロセスは用機器などの限られたリソースで千のモバイルデバイスのための、多くのCPU時間を消費し、より多くの命令ディスパッチとメモリアクセス時間を必要としますこれはオーバーヘッドのかなりの量です。Dalvik VMはレジスタベースのアーキテクチャです。そんなに速くアクセスモードスタックイル形態千より、スルーレジスタとの間の直接アクセスデータ転送。

Dalvikヒープ
、スタックは2つの部分にオブジェクトを分配するためのDalvik仮想マシンを分け、一方の部分は、Activeヒープ、接合子ヒープと呼ばれ、他の部分と呼ばれます。Androidシステムが起動した後、最初の受精卵のDalvik仮想マシンを作成するためのプロセスがあるだろう、それだけでヒープを維持します。すべてのアプリケーションプロセスは、プロセスの開始後に受精卵フォークの外で、独自ののDalvik仮想マシンを所有しています。アプリケーションの作成プロセスでは、のDalvik仮想マシンのレプリケーション戦略COW受精卵のプロセスのアドレス空間。
あなたが最初のアプリケーション・プロセスを作成すると、他の部分に使用されていないヒープメモリ部門の一部に分かれているヒープメモリの一部に使用されていたであろう。前者はアクティブヒープと呼ばれている受精卵ヒープと呼ばれます。これは単にアプリケーションプロセス、それの受精卵ヒープに内容をコピーします。彼らは、オブジェクトを割り当てる必要があるときに受精卵プロセス、またはアプリケーション・プロセスの両方の後、アクティブなヒープです。これは、スタック受精卵の書き込み動作が行われるので、行っコピー書き込み操作を減らすことができるという可能性ように少しとすることができます。ヒープが実際にオブジェクトを割り当てられたメイン受精卵受精卵プロセスは、起動クラスの間にリソースあらかじめロードされ、アップオブジェクト。これらの事前ロードされたクラス、リソース、およびオブジェクトは、長期的に行うことができること。この手段は、受精卵のプロセスおよびアプリケーション・プロセスを共有しました。これは、コピー操作を削減するだけでなく、メモリ要件を低減することができます。Dalvik仮想マシンは、ガベージコレクションの一部である場合、実際には、唯一のコレクトヒープに割り当てられたアクティブ内のオブジェクト。

アート仮想マシン

アートと仮想マシンのDalvik仮想マシンを区別するために、我々は以下の二つの概念を導入する必要があります。

  • JIT
    JIT(ジャストインタイムコンパイル、時間のコンパイル)にも動的コンパイル、マシンコード技術に翻訳バイトコードによって実行時、プログラム実行速度を作るとしても知られ、。
    JVM、Javaバイトコードにソースコードをコンパイルするためのjavacでは、一つ一つはJVMによって説明遅く、1つの通訳翻訳によって、1によるリード1に対応した機械語命令にバイトコードを翻訳し、速度を向上するには、アプリケーションを実行する際に、新しいクラスがあるたびに、JITコンパイラは、コンパイルされたコードを、ネイティブコードタイプの命令(すなわち、ネイティブコード)のような簡単なようであるように最適化され、このクラスをコンパイルしますので、同じロジックの次の実行、スピードが速くなります。
    しかし、ネイティブマシンコードへの変換ノートへの1つの事、DEXバイトコードは、アプリケーションの動作中に発生し、アプリケーションごとに再実行、これは翻訳の仕事をしなければならないやり直し、各再オープンアプリは、JITコンパイラが必要です。
  • AOT
    異なるART戦略とのDalvikは、ART環境では、アプリケーションは、最初にインストールされてそれが本当にローカルアプリケーション作り、マシンコードにバイトコードを事前にコンパイルされます。APK classes.dexツールdex2oatファイル内にパッケージ、インストールエンバクは最終的にELFファイル形式を取得し、機械語命令に変換されます。
    あなたがアプリケーションを開くたびに、実行はネイティブマシンコードであることをこれが保証されます。ランタイムの実行に説明することに加えて、より効率的に、より高速な起動。

  • ARTとのDalvikの違い
    1. アプリケーションをインストールする際に、それはより多くのストレージ容量を消費しますので、ARTの必要性は、機械語にプログラムコードを入れて、その増加は、スペースは通常、アプリケーションコードのパッケージサイズの20%未満である消費されていました
    2. デュー・プロセストランスコードを使用すると、アプリケーションのインストール時には、必然的に延長されます

参考記事:

  1. https://www.jianshu.com/p/156a71091333
  2. https://www.jianshu.com/p/713d24fa9982
  3. https://blog.csdn.net/computer30000/article/details/79941151

おすすめ

転載: www.cnblogs.com/cambodia/p/12146300.html
おすすめ