セッションメモ - A JIT Compiler for Android's Dalvik VM -
Posted by drikin on 2010年5月20日 13:01
Dalvikのインタープリタも十分最適化されてて早いけど
DalvikのJITは、驚くぐらいバラエティに富んだJIT
- いろいろなタイミングで、コンパイルされるし
- いろいろなものが、JIT対象になってる
上の組み合わせによって、長所短所があるけど、バッテリー駆動のAndroidのでは、コンパクトさや、効率を優先
メソッドベースとトレースベースのJITの違い
JITの仕組みについて、不勉強のため、あまり技術的な詳細が理解できないT_T
メソッドとトレースの長所短所を説明(良く聞いてなかった)した上で、Froyo(2.2)はトレースJITを選択した。
トレースJITのフローチャート、なんかキャッシュとか活用して、省メモリで、効率よくなるように、最適化してるよ的な話。
Dalvik VMへのJIT採用って、2.2が最初になるって事?
(要確認)↑2.2が最初のリリースだと言ってました。
JITの将来の方向性について
自分のアプリをJITに最適化するには
Robo Defenceの例
libskia.soが全体の74%のボトルネック Dalvik自体は、全体の4%位しか、CPUを使ってない SkiaはNativeコードなので、こういうパターンだと、JITの効果は少ない
Checker(オセロ風)アプリの場合
OProfileによると、最適化後dalvik-jit-code-cacheとlibdvm.soで全体の96.45%のCPUを消費 すなわち、JITの効果絶大=5倍の高速化
JITのプロファイリング
Set "dalvik.vm.jit.profile = true" in /data/local.prop
JITのデバッグ
JIT有効化状態で、RuntimeExceptionとかで、原因を追及するのは難しいので、とりあえずJITをオフにしてデバッグすべし。JIT有効時にだけ、問題が起きれば、たぶんJIT自体のバグ(と言い切るのが素敵ww)
Verification botで、インタープリタにダイナミックにコードをレビューさせる事が出来る。