Android Runtime ( ART ) は、 Androidオペレーティングシステムで使用されるアプリケーション実行環境です。Androidが当初使用していたプロセス仮想マシンであるDalvikに代わり、 ART はアプリケーションのバイトコードの一部をネイティブ命令に変換し、その命令はデバイスの実行環境によって実行されます。 [ 2 ]

Android 2.2「Froyo」では、トレースベースのジャストインタイム(JIT)コンパイルがDalvikに導入され、アプリケーションが実行されるたびに継続的にプロファイリングを行い、頻繁に実行される短いバイトコードセグメントをネイティブマシンコードに動的にコンパイルすることで、アプリケーションの実行が最適化されました。Dalvikはアプリケーションの残りのバイトコードを解釈しますが、「トレース」と呼ばれるこれらの短いバイトコードセグメントのネイティブ実行により、パフォーマンスが大幅に向上します。[ 3 ] [ 4 ]
Dalvikとは異なり、ARTは、アプリケーションのインストール時に、パフォーマンスに最も影響を与える部分(以前はアプリケーション全体)をネイティブマシンコードにコンパイルすることで、事前コンパイル(AOT)の使用を導入しています。このようにして、ARTは全体的な実行効率を向上させ、消費電力を削減し、モバイルデバイスのバッテリー駆動時間を向上させます。同時に、ARTは、アプリケーションの実行速度の向上、メモリ割り当てとガベージコレクション(GC)メカニズムの改善、新しいアプリケーションデバッグ機能、およびアプリケーションのより正確な高レベルプロファイリングをもたらします。[ 2 ] [ 5 ] [ 6 ]
後方互換性を維持するため、ARTはDalvikと同じ入力バイトコードを使用します。これは、APKファイルの一部として標準の.dexファイルを通じて提供されます。一方、.odexファイルは実行可能ファイルおよびリンク可能ファイル形式(ELF)に置き換えられます。ARTのデバイス内dex2oatユーティリティを使用してアプリケーションがコンパイルされると、コンパイルされたELF実行可能ファイルから実行されます。その結果、ARTはDalvikの解釈とトレースベースのJITコンパイルに関連するさまざまなアプリケーション実行オーバーヘッドを排除します。
当初、ART の欠点は、アプリケーションのインストール時にコンパイルに余分な時間が必要であり、コンパイルされたコードを保存するためにアプリケーションがわずかに多くの二次記憶装置(通常はフラッシュメモリ) を消費することであった。 [ 2 ] [ 5 ] [ 6 ]長い AOT コンパイルは、毎月のセキュリティ更新が一般的になり、更新のたびにユーザーが長期間 OS から締め出されるようになったときに特に問題となった。
これを改善するため、Android 7.0 (Nougat) ではハイブリッド方式が導入されました。新しくインストールされたアプリは JIT コンパイルを使用して実行され、ランタイムによってプロファイリングされます。デバイスがアイドル状態で充電中の場合、ランタイムは最も頻繁に使用される (「ホット」) コードに対して AOT コンパイルを実行します。[ 7 ]
Android 4.4「KitKat」では、デフォルトの仮想マシンであるDalvikの代替ランタイム環境としてARTの技術プレビューが導入されました。 [ 8 ] [ 9 ]その後のAndroidのメジャーリリースであるAndroid 5.0「Lollipop」では、Dalvikは完全にARTに置き換えられました。
Android 7.0「Nougat」では、ARTが純粋なAOTからハイブリッドJIT/AOTソリューションに変更され、Javaランタイム環境が廃止されたApache HarmonyからOpenJDKに切り替わり、コードプロファイリング機能を備えたJITコンパイラが導入されました。[ 10 ] JITコンパイラはARTのAOTコンパイラを補完し、デバイスがアイドル状態または充電中にAOTコンパイラがマシンコードにコンパイルする「ホットコード」(頻繁に使用されるコード、UIスレッドで実行されるコード、または起動時間に影響を与えるコード)を特定することで、ランタイムパフォーマンスの向上とストレージ容量の節約に役立ちます。使用頻度の低いコードはJITコンパイルに依存します。[ 11 ] [ 12 ]
Android 9「Pie」では、圧縮バイトコードファイルを使用することでAPKが使用するストレージ容量が削減され、同様のデバイスを持つユーザーがアプリをダウンロードする際に、プロファイラデータをGoogle Playサーバーにアップロードしてアプリにバンドルできるため、Google Playからのダウンロード時間が最大40%短縮されます。Google Playクラウドプロファイルを使用すると、インストール時にアプリを最適化できるため、Android 7.0から8.1で発生していた初期パフォーマンスの問題を回避するのに役立ちます。[ 13 ]
2021 年 7 月、[ 14 ]ベースライン プロファイルの概念が導入されました。ベースライン プロファイルは、アプリの初回起動時から AOT コンパイルを受けるべきメソッドとクラスを定義する ART プロファイルであり、Android 7.0 以降と互換性があります。ベースライン プロファイルは、利用できない場合は Android 9 の Google Play クラウド プロファイルと同様の機能を提供し、利用可能な場合はクラウド プロファイルと自動的にマージされます。ベースライン プロファイルは、AndroidX ライブラリとJetpack Composeのリリースに含まれています。[ 15 ]
Android 13では、ART がLinux userfaultfdシステムコールを利用した新しいガベージコレクタ(GC)で更新されました。[ 16 ] [ 17 ] [ 18 ]これにより、メモリ負荷、コンパイル済みコードサイズ、ジャンクが軽減され、ガベージコレクション中にメモリ不足でアプリが強制終了するリスクが防止されます。[ 18 ]その他の変更により、アプリの起動が改善され、ジャンクが軽減され、パフォーマンスが向上します。[ 18 ]メインラインプロジェクトにより、Android 12の ART も更新されます。[ 16 ]
{{cite web}}: CS1メンテナンス: アーカイブサービスは非推奨になりました (リンク)