blog

Android 4.4 ARTの実行モードとオープン方法

Googleは、将来的にAndroidシステム上でプログラムを実行する試みは、Dalvik仮想マシンではなく、ネイティブ命令実行への本当の方法ではないのですか?もし本当にそうなら、コードの実行効率は多...

Jun 27, 2025 · 3 min. read
シェア

アンドロイド4.4artのランモードとはどういう意味ですか?アンドロイド4.4artの起動方法を教えてください。

Android 4.4では、開発者モードに行くと「ランタイム環境の選択」という項目が追加され、DalvikとARTの2つの選択肢があります。

DalvikはAndroidで使われているJava仮想マシンですが、ARTとは何ですか?

ARTはAOTコンパイラです。AOTとは、JITが実行時に動的にコンパイルされるのに対し、中間コードが実行前に静的にネイティブコードにコンパイルされることを意味します。

AOTとJITにはそれぞれ長所がありますが、ここで詳しく説明するつもりはありません:

AOTの主なコンパイル・プロセスは開発マシン内で行われるため、コンパイルが多少遅くても問題ありません。

より具体的には、SunのJVMは、例えば、JITは2つのモードに大まかに分かれています:クライアントとサーバー。クライアントモードのVMは、JITコンパイルのホットスポットの領域を識別しながら、大幅に起動の速度に影響を与えないように解釈され、実行され、アカウントにメモリ消費量を考慮し、すべてのJavaバイトコードは、ローカルコードにコンパイルされません。サーバーモードは、包括的なJITコンパイルされるため、サーバーの起動が少し遅く、それは問題ではない、一度実行すると、長い時間のために実行されますので、完全に最適化するために少し時間を費やす価値があります。

最適化の限界のため、JITでコンパイルされたネイティブコードのサイズは通常バイトコードの5倍から10倍と大きくなります。アンドロイドのJITコードキャッシュもメモリ使用量の重要なプレーヤーです。

AOTはプリコンパイルされたマシンコードなので、AOTによって生成されるコードや、それをロードして実行するプロセスは、通常のネイティブコードとあまり変わりません。ただし、ランタイムのGCサポートは必要です。

AOTはコンパイル最適化を行うための時間とスペースを確保することができますが、必ずしもJITよりも性能が良いというわけではありません。JVMがコンパイル最適化を使用できるかどうかを実行時に動的に決定するだけで、実行時に動的なアンチ最適化を行うことができるものがかなりあります。こうしたことは、AOTでは簡単にはできません。

AOTのコンパイラは通常2つのバージョンがあります。1つは開発マシン上でシステム全体とプリインストールアプリをコンパイルするもので、もう1つはデバイス上で動作し、新しくインストールされたアプリのコンパイルと接続を行うライトバージョンです。

AOTによってコンパイルされたコードは、ランタイムのサポート、特にGCを必要とします。

ARTがJITをAOTコンパイラに置き換えた場合、パフォーマンスはさておき、Androidのメモリフットプリントは恩恵を受けるはずです。現在、dexコードはdex => 最適化されたdex => JITキャッシュというプロセスを経ており、メモリはodexとJITキャッシュの両方を保持する必要があります。しかし、ARTのインタプリタ・コードが最適化解除に言及していることを考えると、場合によっては、実行を解釈するためにdexコードをロードする必要がある可能性もあります。重要なことは、oatは直接mmapで実行可能なコードであるべきで、改ページを伴うロード/リロードはodexから動的にコンパイルするよりも高速になるということです。

簡単に言えば、より高い実行効率でソフトウェアを実行するには、LLVM

パフォーマンスが向上し、その一方で、プリロードされたプライベートソフトウェアは、マシン上のプログラムの本体を残して、機密保持の良い仕事をするために使用することもできますマシンコード、ノーdeoatになりました。

グーグルはクロームで同じようなことをしました。

現在のChromeはpNACLをサポートしています。pNACLもバイトコードとして配布し、ローカルで再コンパイルするモデルです。これにより、ネイティブコードに直接コンパイルされたソフトウェアに近いパフォーマンスが得られます。

Mozillaが提供する代替案はasm.jsで、C++ネイティブコードを実行するためにjavascriptエンジンを使用します。

要約:だから、Googleは、将来的にAndroidシステム上のプログラムを実行しようとするDalvik仮想マシンではありませんが、ネイティブ命令の実行に実際の方法ですか?この場合、コードの実行効率は少し低くても、現在のAndroidプラットフォームのデバイスの構成は、Iphoneの構成よりもはるかに強力であることを思い出して、その後、AndroidがスムーズにIphoneに追いつく実行している角を曲がったところではないですか?

Read next

アプリケーション・デリバリー、パフォーマンスの課題に直面 "インテリジェント・トラフィック "の構築には継続的なイノベーションが必要だ

一般の人々がまだ「ビッグデータ」が何であるかを知らない時代に、ますます多くの人々が指先を使って近くの食べ物を探したり、交通経路を探したり、オンラインで買い物をしたり、SNSにログインして生活の一瞬一瞬を記録したりすることに慣れてきました。「指先の中国 "はビッグデータを "大きく "し、その結果、ネットワーク・トラフィックの急増は避けられません。

Jun 27, 2025 · 4 min read