作者について
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仮想マシンのアーキテクチャ 改訂版
- https://www2.slideshare.net/kmt-t/dalvik-10316622
- 世代が古いですがアウトラインの理解にはいいと思います。
- 進化するART
- https://www2.slideshare.net/kmt-t/art-47396171
- DroidKaigi2015の発表資料です。
- 世代が古いですがアウトラインの理解にはいいと思います。
- Androidの仮想マシン Dalvik編
- https://tatsu-zine.com/books/androidvm-dalvik
- 自分が書いた本ですAndroidの仮想マシンについては世界で一番くわしい本です。AOSPのソースコードを読んで書いているので、書いてある内容はこの本以外に書かれている文献はありません。Androidの仮想マシンを理解したければ辞書的に使えると思います。内容的にはかなり量があるので通読しようとすると挫折すると思います。
参考文献
- AOSPドキュメント
- https://source.android.com/devices/tech/dalvik?hl=ja
- 本家本元のドキュメント。
- とりあえず普通の人が知りたいことは全部書いてある。
- 日本語なのでわかりやすい。
- AOSPリポジトリ
- https://android.googlesource.com/platform/art/
- ARTの最新のコードを勉強するにはこれしかありません。
- というかワールドワイドでAndroidの仮想マシンのドキュメントを書いている人はほとんどいません。
- コンパイラ―原理・技法・ツール
- https://www.amazon.co.jp/dp/478191229X
- 通称ドラゴンブック。恐らくAndroidの仮想マシンを書いている人はこの本を読んで開発していると思います。本に書いてある内容が非常に多いです。タイガーブックと呼ばれる本もあってそっちも楽しいのですが、基本はドラゴンブックです。
- Java仮想マシン仕様
- https://www.amazon.co.jp/dp/489471356X/
- 絶版なのと必読ではないのでスルーでも良いです。最新版のJavaVMの仕様って日本語で読めないんですかね。
- VMの歩む道。 Dalvik、ART、そしてJava VM
- https://www2.slideshare.net/yyyank/vm-dalvikartjava-vm
- あの @kmizu さんから名指しでほめられたのがうれしい。
- Android 仮想マシンのランダムテストにおける命令列生成の強化
- https://ist.ksc.kwansei.ac.jp/~ishiura/publications/T2019-03b.pdf
- 人生で初めて論文の文献リストに載ったぜ!