Google Developer Day 2008 Japan - Android Dalvik VM の内側
All English で内容が非常にコアなため紙のメモしかとらず、通訳も聞かず。
皆さんよく理解してるなぁ・・・
目指す最低動作環境
CPU x00MHz
メモリ64MB(40MBでスタートアップ、24MBで他のサービス)
実質、他のサービスが上がっていたら余裕はないだろうけど。。
specsheet見たほうがよい
Dalvik VM
レジスタベースのVMなので、classファイルからdex(dalvik executable?)に変換する。
dexのフォーマットは下記。
header |
string_ids |
type_ids |
proto_ids |
field_ids |
method_ids |
class_defs |
data |
jarは下記の連続
.class |
定数プール |
データ |
定数プール |
データ |
.... |
dexだとどうなるか後で調べる
dexフォーマット中のmethod_idっていうのがObjectを参照?
Shared Constant Pool(共有定数プール)
Memory is Saved via.
サイズをちっちゃくできる。
jarからdexにする時に、class統合みたいなことをやってる
携帯アプリのサイズ圧縮でやるなぁ
ex)common system libraries
比率 | |
jar | 100 |
compressed jar | 50 |
uncompress dex | 48 |
軽い!
shared dirty
library "live" dex
shared copy-on-write heap
private dirty
app "live" dex structures // allocated
app heap
実行時に変わる部分は汚くなるので要領の無駄?
Zygote(接格子)
意味がわからなかった...orz
GC,Sharingの構造
プロセス、ヒープ、GCs....
0,Data |
ObjectData |
ObjectData |
ObjectData |
... |
これが、
Parallel mark bits |
で、avoid un-sharing page
いまいち。。
No JIT
ただし、ネイティブレベルでgraphicsとsoundはサポートする
Optimazation
byte-swapping and padding(on ARMは不要)
static linking
"inling" special native method
Register Machice
Why?
avoid ...
Stats
30% fewer instructions
35% fewer code units
more bytes in the instruction stream
dexのがよい
より少ないbyte, dispatches, read, writes
Android開発のアドバイス
- TimeScale
Human interaction scale
10〜30 interaction / sec
Human perception scale
25〜30 image frames / sec
continuous audio,synched within 100msec
人間の認知できるレベルは上記のスケール。タッチの間隔などの際は、上記のレベルで知覚されることをよく考えてアプリを作る。
と言っていた気がする
Loop Wisely
for,do-while はいっちばん効率の良い方法で書くこと。
listかなんかで回すなんてもってのほか。
メモが追い付かなかったが、1clockもムダにするなというニュアンスを感じた。
Avoid Alloc
short-lived objects need to be GCs.
long-lived objects take precious memory.
開発向け資料
http://code.google.com/intl/ja/android/
今のところ日本語訳でざっくり知りたければ下記
http://www.android-ja.net/modules/xpwiki/?Getting%20Started