Google
Dalvik
からART
(Android ランタイム)に移行しています。
どうすればパフォーマンスが向上するのか、理解しようとしていました。
私が見つけた最良の説明は、以下の画像です。
変更された主なコンポーネントの 1 つはdexopt
ですdex2oat
。
これらについてはよくわからないので、違いと、これがどのようにパフォーマンスを向上させるかを誰かが説明できますか?
Google
Dalvik
からART
(Android ランタイム)に移行しています。
どうすればパフォーマンスが向上するのか、理解しようとしていました。
私が見つけた最良の説明は、以下の画像です。
変更された主なコンポーネントの 1 つはdexopt
ですdex2oat
。
これらについてはよくわからないので、違いと、これがどのようにパフォーマンスを向上させるかを誰かが説明できますか?
dexopt は、dex ファイルに対していくつかの最適化を行います。仮想呼び出し命令を、呼び出されるメソッドの vtable インデックスを含む最適化されたバージョンに置き換えるなどの処理を行うため、実行中にメソッド ルックアップを実行する必要はありません。
dexopt の結果は、odex (最適化された dex) ファイルです。これは、最適化された仮想呼び出し命令などの最適化されたオペコードを使用することを除いて、元の dex ファイルに非常に似ています。
dex2oat は、dex ファイルを取得してコンパイルします。結果は基本的に、ネイティブに実行されるelfファイルです。そのため、仮想マシンによって解釈されるバイトコードの代わりに、プロセッサによってネイティブに実行できるネイティブ コードが含まれるようになりました。これは、AOT (事前) コンパイルと呼ばれます。
どちらのツールも通常、デバイスへのインストール時に実行されます。
考慮すべきもう 1 つの要因は、dalvik が JIT (ジャストインタイム) コンパイラを使用していたことです。つまり、dalvik はバイトコードをネイティブ コードにコンパイルすることもできました。ただし、主な違いは、ART は事前にすべてをコンパイルするのに対し、dalvik はヒューリスティックを使用してバイトコードのサブセットのみをコンパイルし、最も頻繁に実行されるコードを検出し、実行中にコンパイルすることです。