Android runtime(ART)は、Android上のアプリケーションと一部のシステムサービスで使用されるマネージドランタイムです。 ARTとその前身のDalvikはもともと作成されました特にAndroidプロジェクトのためのものです。 ランタイムとしてのARTは、DalvikExecutable形式とDexバイトコード仕様を実行します。
ARTとDalvikはDexバイトコードを実行する互換性のあるランタイムであるため、DALVIK用に開発されたアプリはARTで実行するときに動作するはずです。 しかし、Dalvikで動作する技術は芸術では動作しません。 最も重要な問題の詳細については、”AndroidランタイムでのAppの動作の検証(ART)”を参照してください。
アート機能
アートによって実装された主な機能のいくつかは次のとおりです。
ahead-of-time(AOT)compilation
ARTは、appperformanceを向上させることができるahead-of-time(AOT)compilationを導入しています。 ARTは、Dalvikよりもインストール時間の検証も厳しくなっています。
インストール時に、ARTはon-devicedex2oatツールを使用してアプリをコンパイルします。 このユーティリティは、入力としてDEXファイルを受け入れ、ターゲットデバイス用にコンパイルされたアプリ実行可能ファイルを生成します。 このユーティリティは、すべての有効なDEXファイルを難なくコンパイルできます。 ただし、一部の後処理ツールでは、DALVIKによって許容されるが、ARTによってコンパイルできない無効なファイルが生成されます。 詳細については、”AddressingGarbageコレクションの問題”を参照してください。
ガベージコレクションの改善
ガベージコレクション(GC)は非常にリソースを大量に消費するため、アプリのパフォーマンスが低下し、表示が途切れたり、UIの応答性が低下したり、その他の問題が発生する可能性があります。 アートは、いくつかの方法でgarbagecollectionを向上させます:
- 主に単一のGC一時停止を伴う同時設計
- バックグラウンドメモリの使用量と断片化を減らすための同時コピー
- GC一時停止の長さはヒープサイズに依存しない
- 最近割り当てられた短命のオブジェクトをクリーンアップする特殊なケースのための総GC時間が低い
- ガベージコレクションの人間工学が改善され、同時ガベージコレクションがよりタイムリーになり、
- GC_FOR_ALLOC典型的なユースケースでは非常にまれなイベント
開発とデバッグの改善
artは多くのものを提供しています アプリの開発とデバッグを改善するための機能。
サンプリングプロファイラのサポート
歴史的に、開発者はTraceviewtool(tracingapplication実行用に設計された)をプロファイラとして使用してきました。 Traceviewは有用な情報を提供しますが、Dalvikでの結果はメソッド呼び出しごとのオーバーヘッドによって歪められており、ツールの使用は実行時のパフォーマンスに
ARTは、これらの制限を持たない専用のサンプリングプロファイラのサポートを追加します。 これにより、大幅な減速なしにアプリの実行がより正確に表示されます。 KitkatリリースでTraceview forDalvikにサンプリングのサポートが追加されました。
より多くのデバッグ機能のサポート
ARTは、特にモニターとガーベッジコレクション関連の機能で、多くの新しいデバッグオプションをサポートしています。 たとえば、次のことができます:
- スタックトレースに保持されているロックを確認し、ロックを保持しているスレッドにジャンプします。
- 特定のクラスのライブインスタンスの数を尋ね、インスタンスを見て、どの参照がオブジェクトをライブに保っているかを尋ねます。
- 特定のインスタンスのイベント(ブレークポイントなど)をフィルタリングします。
- メソッドが終了したときに返される値を参照してください(“method-exit”イベントを使用)。
- 特定のフィールドにアクセスおよび/または変更されたときにプログラムの実行を中断するようにfield watchpointを設定します。
例外とクラッシュレポートの診断の詳細が改善されました
ARTは、実行時の例外が発生したときにできるだけ多くのコンテキストと詳細を提供します。 ARTは、java.lang.ClassCastException
、java.lang.ClassNotFoundException
、およびjava.lang.NullPointerException
の拡張された例外の詳細を提供します。(Dalvikのそれ以降のバージョンでは、java.lang.ArrayIndexOutOfBoundsException
とjava.lang.ArrayStoreException
の拡張された例外の詳細が提供され、配列のサイズと範囲外のオフセットが含まれるようになりました。)
たとえば、java.lang.NullPointerException
は、アプリが書き込もうとしていたフィールドやtocallしようとしていたメソッドなど、アプリがnullポインターで何をしようとしていたかに関す ここではいくつかの典型的な例があります:
java.lang.NullPointerException: Attempt to write to field 'intandroid.accessibilityservice.AccessibilityServiceInfo.flags' on a null objectreference
java.lang.NullPointerException: Attempt to invoke virtual method'java.lang.String java.lang.Object.toString()' on a null object reference
ARTはまた、Javaとネイティブスタック情報の両方を含めることにより、アプリネイティブクラッシュレポートで改善されたコンテクスト情報を提供します。