Dalvik VM

参考資料



Androidに搭載されているDalvikVMには、dex bytecodeのインタプリタと、JITコンパイラ、GC、各々を連携するRuntimeが搭載されている。

最新のAndroid 4.1以降では、JITコンパイラに新たなターゲットとしてmipsが追加された。
JITコンパイラのターゲットアーキテクチャは、x86 arm mips になっている。

Dalvik VMには、多数のpretty pringが実装されている。
android trunkをビルドする際に、適当にWITH_JIT=trueを付加した上で、
dalvikvmのソースコードを適度に修正すれば、
tracing jitの詳細なログや、生成したARM asmをログとして参照できる。

ログを参照する場合は、logcatを使用すればOK。

JITコンパイラ

すごくざっくり表現すると、
dex => 抽象化されたMIR => マシンに近いLIR(機種ごとに用意されたテンプレート型のコード生成) => アセンブル

jb追加のmips用のcodegenもほぼ完成に近い構造にみえる。
dalvikのmips対応はarmと同レベル、実コード生成は比較できてないけど、arch依存の最適化はarmより多い。
理由はmipsのほうがarmより貧弱なmarchだからだと思う。

DalvikVM vmのJITコンパイラは、
デフォルトがtracing jitで、method jitはinvoke interface命令をpredicated inliningするときだけみたい。

x86はemulatorを動かすためと割りきっているのか、機種依存の工夫はほとんど見られない。
もしくは追加が不要なほど優秀なのだろうか。

と思っていたら、Ncgという名前のコード生成機に置き換えられたらしい。intelからのパッチみたい。

  • 最終更新:2012-10-14 22:26:26

このWIKIを編集するにはパスワード入力が必要です

認証パスワード