新しいAndroidのランタイム「ART」でアプリの動作が快適に
もうじき、DalvikはAndroidの新しいランタイムに置き換わるようだ。
AndroidアプリはDalvikで動作している。朝になれば日が昇り、水に触れば濡れるのと同じくらい、これは当たり前のことだ。AndroidアプリがRAM容量やプロセッサの異なる様々なデバイスで動作するのも、Dalvikという土台があるからである。
近い将来、グーグルはDalvikを追放して「Android Runtime(ART)」と呼ばれる新しい規格を採用するかもしれない。
Dalvikとは、コードをコンパイルしてAndroidアプリを動作させるためのバーチャル・マシンである。通常AndroidアプリはJavaというプログラミング言語で書かれており、バイトコードにコンパイルされて各デベロッパーからGoogle Playのようなアプリストアに提出される。その後、バイトコードはJavaバーチャル・マシン用のファイルからDalvikが実行可能なファイル形式へと変換されるのだ。
あなたがスマートフォンにインストールしたアプリは、スマートフォン内部のどこか平和な場所で幸せに暮らしていると思っているだろうか?そんなことはない。スマートフォン内に「アプリ」というものは存在しないのだ。実際にはあなたがアプリを起動するたびに、プログラムで構成されたバイトコードがコンパイラを介して実行され、動作する。Androidでは、「Just In Time (JIT) 」コンパイラとして知られるプロセスによって汎用的なバイトコードがマシンコードに変換される。ここでようやく、アプリとして知られるハードウェア固有のプログラムになるのだ。Dalvikは、Androidの中でこのような働きをしている。
ちょっと想像してみてほしい。あなたがアプリを開くたびに、スマートフォン内部のあらゆる関連各所はアプリのコードをデバイス上で機能させるためにアセンブルし、スクランブルを行わなければならない。アプリを閉じれば関連各所は一旦リラックスし、アプリを開けば再びスクランブルを開始する。この方法はアプリケーションを実行する上で非常に効率的とは言えないが、これによってアプリは基本的にあらゆるデバイス上で動作することが可能となる(BlackBerryがAndroidアプリをBlackBerry端末に移植するのが容易だった理由のひとつがこれだ)。
グーグルはAndroid Runtimeによってこのプロセスを変更し、アプリをもっと早く動作するように、そしてこれまでよりもデバイスのハードウェアに依存するようにしようと試みている。
「ART」とは何か?
今週私は、Nexus 5のデベロッパー設定をいじってAndroid Runtime(ART)を初めて使ってみた。デバイスの「開発者向けのオプション」設定の中に、「ランタイムの選択」という項目が用意されているのだ。この項目には「Dalvikを使う」と「ARTを使う」の選択肢がある。
ARTについて書かれた記事はまだ少ないが、Android Policeに特集記事が載っていた。グーグルは2年の間密かにARTを開発してきたようだ。ARTはJITの代わりに「Ahead Of Time (AOT) 」というコンパイラを使っている。WebブラウザがWebサイトを素早くロードできるよう、予めキャッシュしておくのと似たような働きをする。AOTコンパイラは、アプリがデバイスにダウンロードされた時点でバイトコードをマシンコードに変換するのだ。このマシンコードはデバイスの記憶装置をより多く必要とするが、アプリの起動は早くなり、動作もスムーズになる。
グーグルのAndroid開発者のウェブサイトに、ARTに関する非常に短い紹介が潜んでいた。
ARTは、4.4のリリースで実験的に導入される新しいAndroidのランタイムです。「設定」> 「開発者向けのオプション」でオンにすることができます。これはKitKatで進行中の開発のプレビューであり、開発者やパートナーからのフィードバックを得るために利用可能になっています。
重要:デフォルトのランタイムはDalvikにしておく必要があります。さもないと、Androidの実装やサードパーティ製のアプリケーションが壊れる危険性があります。
現在、2つのランタイムが選択可能になっています。既存のDalvikランタイム(libdvm.so)とART(libart.so)です。デバイスは、これらの片方、または両方を使って構築することができます(両方がインストールされている場合は開発者向けのオプションからデュアルブートが可能です)。
重要な点は、ARTはデベロッパーやデバイスメーカー向けの実験的な設定であるということだ。オペレーティング・システムを不安定にし、アプリを絶えずクラッシュさせ、最終的にNexus 5をただのプラスチックの塊に変えてしまう可能性があるのである。
Android Policeのコーディー・トゥームズはARTの可能性について次のようにまとめている。
今のところ、色々な推測や一部のベンチマークの数値は、新しいランタイムがほとんどのアプリケーションの実行時間を半分にカットすることが可能だということを示唆している。これは、長時間実行されるプロセッサ集中型のタスクがより速く処理を終え、システムをより頻繁に、かつ長くアイドル状態にできることを意味する。通常のアプリケーションも、スムーズなアニメーションや、タッチまたは他のセンサー・データに対する瞬間的なレスポンスといった恩恵を受けることができる。さらに、一般的なデバイスがクアッド・コア(またはそれ以上)のプロセッサを搭載している現在、活性化するコアはより少なくて済む場合が多いだろう。低パワーのコアであってもARMのbig.LITTLEアーキテクチャにおいて有効に活用することを可能かもしれない。これによってバッテリーの寿命とパフォーマンスがどれだけ改善されるかは、使い方とハードウェアにもよるが、かなり期待できるはずだ。
Dalvikが追放され、Androidアプリのパフォーマンスを大いに改善する効率的なランタイムが採用される日はすぐにやって来るのだろうか?おそらくすぐには来ないだろう。グーグルは当面の間、パートナー・メーカーやデベロッパー達と共にARTのテストを行うはずだ。ARTが想定通りの動作をするようになれば、スマートフォンは最早アプリを動かすためにスクランブルを行う必要はなくなる。アプリを動かすためのコードはスマートフォン内部のどこか平和な場所で幸せに暮らしており、あなたがアプリを開くのを待っているのだから。
追記:グーグルによると、DalvikをAndroid Runtimeに置き換えるのは「次の機会」になるということだ。おそらくAndroidの次バージョンということだろう。
Dan Rowinski
[原文]