🦔

Androidの仮想マシン/総括

2020/12/05に公開

作者について

Androidの黎明期に製品開発のテーマがあり、先行研究でDalvik仮想マシンの調査を始めたのがきっかけで、Android仮想マシンマニアになりました。

実はAndroidのアプリケーションを書いたこともありませんし、AndroidのOS、ミドルウェア層に関する知識はありません。純粋に仮想マシンだけです。

Androidの仮想マシンとは

Androidではアプリケーションを開発するのにJavaまたはKotlinが使われます。歴史的経緯でJava仮想マシンのクラスファイルをdxというツールでDalvik仮想マシンのdexファイルにコンパイルする方式になっています。今はdexファイルを直接使う形式にはなってませんがアプリケーションパッケージ(apk)にはdexで格納されています。

旧世代 Dalvik仮想マシン

Android2.2より前ではJITコンパイラではなくインタープリタでした。そのためインタープリタの高速化に力が入れられています。アーキテクチャの基本的な特徴は以下のとおりです。

  • Javaのクラスファイルをdexファイルにコンパイルします。
  • アプリケーションパッケージはapkです。
  • apkの中にdex実行ファイルが入っています。
  • バイトコード方式です。
  • レジスタマシン(Java仮想マシンはスタックマシン)です。
  • 実行時にJITコンパイルされます。
  • CGは並列マークアンドスイープです。
  • 一部のJavaフレームワークのメソッドは仮想マシンに埋め込まれています。

現世代 ART仮想マシン

Android4.4で導入された新しい仮想マシンであるARTについては実行ファイルの仕組み、AOTコンパイラ、GCをおさえておけば後はDalvikとの差分かなと思っていますが、自分の知識が古いので違うかも知れません。

  • AOTコンパイラ
    • アプリケーションインストール時にLinuxで一般的なELF実行ファイルにコンパイルします。
    • 最適化が高度化されているのでコンパイラの最適化の知識がないと読めません。
  • GC
    • Androidはモバイル向けなのでゲームなどのためにGCの停止時間を短くする必要があります。特殊な方式で停止時間を短くしています。
    • これを調べるだけで大学の修士論文ぐらいにはなります。

自分の書いた仮想マシン記事一覧

(今後記事を書く度に追加していきます)

  • Dalvik仮想マシンのアーキテクチャ 改訂版
  • 進化するART
  • Androidの仮想マシン Dalvik編
    • https://tatsu-zine.com/books/androidvm-dalvik
    • 自分が書いた本ですAndroidの仮想マシンについては世界で一番くわしい本です。AOSPのソースコードを読んで書いているので、書いてある内容はこの本以外に書かれている文献はありません。Androidの仮想マシンを理解したければ辞書的に使えると思います。内容的にはかなり量があるので通読しようとすると挫折すると思います。

参考文献

  • AOSPドキュメント
  • AOSPリポジトリ
    • https://android.googlesource.com/platform/art/
    • ARTの最新のコードを勉強するにはこれしかありません。
    • というかワールドワイドでAndroidの仮想マシンのドキュメントを書いている人はほとんどいません。
  • コンパイラ―原理・技法・ツール
    • https://www.amazon.co.jp/dp/478191229X
    • 通称ドラゴンブック。恐らくAndroidの仮想マシンを書いている人はこの本を読んで開発していると思います。本に書いてある内容が非常に多いです。タイガーブックと呼ばれる本もあってそっちも楽しいのですが、基本はドラゴンブックです。
  • Java仮想マシン仕様
  • VMの歩む道。 Dalvik、ART、そしてJava VM
  • Android 仮想マシンのランダムテストにおける命令列生成の強化

Discussion