49

GoogleDalvikからART(Android ランタイム)に移行しています。

どうすればパフォーマンスが向上するのか、理解しようとしていました。

私が見つけた最良の説明は、以下の画像です。

ダルビックとART

変更された主なコンポーネントの 1 つはdexoptですdex2oat

これらについてはよくわからないので、違いと、これがどのようにパフォーマンスを向上させるかを誰かが説明できますか?

4

2 に答える 2

75

dexopt は、dex ファイルに対していくつかの最適化を行います。仮想呼び出し命令を、呼び出されるメソッドの vtable インデックスを含む最適化されたバージョンに置き換えるなどの処理を行うため、実行中にメソッド ルックアップを実行する必要はありません。

dexopt の結果は、odex (最適化された dex) ファイルです。これは、最適化された仮想呼び出し命令などの最適化されたオペコードを使用することを除いて、元の dex ファイルに非常に似ています。

dex2oat は、dex ファイルを取得してコンパイルします。結果は基本的に、ネイティブに実行されるelfファイルです。そのため、仮想マシンによって解釈されるバイトコードの代わりに、プロセッサによってネイティブに実行できるネイティブ コードが含まれるようになりました。これは、AOT (事前) コンパイルと呼ばれます。

どちらのツールも通常、デバイスへのインストール時に実行されます

考慮すべきもう 1 つの要因は、dalvik が JIT (ジャストインタイム) コンパイラを使用していたことです。つまり、dalvik はバイトコードをネイティブ コードにコンパイルすることもできました。ただし、主な違いは、ART は事前にすべてをコンパイルするのに対し、dalvik はヒューリスティックを使用してバイトコードのサブセットのみをコンパイルし、最も頻繁に実行されるコードを検出し、実行中にコンパイルすることです。

于 2014-10-08T17:40:11.810 に答える