Vengineerの妄想(準備期間)

人生は短いけど、長いです。人生を楽しみましょう!

ART (Android Runtime)について、調べてみました


10連休の夏休みも6/10が過ぎた7日目。

Twitterで鉄人出版社からAndroidの仮想マシンDalvik編が出たことを知って、どうしようかなと思い、Android 4.4(Kitkat)で導入されたART(Android Runtime)について、ネットで調べてみました。

まず始めに見たのは、Dalvik仮想マシンのアーキテクチャ
続いて、ここが変だよDalvik仮想マシン
おまけが、[告知 Dalvik仮想マシンの解説本を出版しました]
達人出版社の本の著者のスライドショーと告知です。

InfoQのAndroidがAOT(ahead-on-time)コンパイラを採用
引用
Androidの新しいランタイムでは,アプリケーションのインストール時に,デバイス上でOSがバイトコードをネイティブなマシンコードにコンパイルする。
にあるように、JITでネイティブなマシンコードにするのではなく、端末にアプリをインストールするときに、ネイティブなマシンコードにするようです。
うー、インストール時なら1回で済むし、各マシン用にある程度最適化できますからね!

Android 4.4 のARTのブートログを見てみたによると、DalvikからARTに変えた後にリブートすると、dex2oatコマンドでdexファイルをネイティブなマシンコードに変換するため、ブートに時間がかかっていると。

Android 4.4に入ったARTのソースを見た感想による、dexファイルをLLVMのbitcodeに変えて、bitcodeをLLVMの最適化&コード生成でネイティブなマシンコードに変換していると。ここでもLLVM大活躍。

でも、Android 4.4のARTのソース解析メモによると、現時点では、デフォルトでは、LLVMではなく、自前のバックエンドを使っていると。。。

さらに、AndroidのARTでは実行中にプロファイリングを行ってそれに基づいて再コンパイルするようだによると、ARTで実行しているときにプロファイリングを取り、部分的に再コンパイルをして、最適化している。
ほにょー!と。


そして、360 Chief Technical Expert: What Android L Means to Developersでは、oatファイル内には、dexファイルの内容も含まれているようです。なので、dexファイルをdex2oatでoatファイルに変換すると2倍以上になるのは理解できました。

Twitterで教えてもらったIBMのプレゼン資料は、よくまとまっています。
State of the ART : Exploring The New Android Kitkat Runtime

最後に、ARTのソースコード(4.4.4_r2)は、こちらにありますよ。