27
ここここここ Dalvik こここここ ( こ こ) 僻僻僻僻僻僻僻僻 kmt-t

ここが変だよDalvik仮想マシン

  • Upload
    kmt-t

  • View
    5.714

  • Download
    3

Embed Size (px)

Citation preview

Page 1: ここが変だよDalvik仮想マシン

ここが変だよDalvik仮想マシン (古い )僻地のプログラマ kmt-t

Page 2: ここが変だよDalvik仮想マシン

自己紹介

▪ ハンドルネーム▪ kmt-t または kmt_t

▪ 業務系アプリケーションエンジニア▪ 2 年前まで組み込みやってました▪ 心はいまだに組み込みエンジニア

▪ 得意分野▪ 画像処理 (2D&3D)/ ファイルシステム / 仮想マシン /C++/C#

Page 3: ここが変だよDalvik仮想マシン

こんなところから来ました

▪ 鳥取県と島根県、どっちが右でどっちが左かわかりますか?

▪ 特急二本乗り換えなのでめっちゃ移動しんどいです

Page 4: ここが変だよDalvik仮想マシン

告知

▪ 2014 年 7 月~ 8 月あたりに本出します!

▪ Android の Dalvik 仮想マシンの解説本!

▪ 出版社は達人出版会!

▪ 表紙は萌え~な感じでデザインしてもらいました!

Page 5: ここが変だよDalvik仮想マシン

ちょっとだけ褒めてほしい

▪ 本の執筆開始は 2012 年 12 月

▪ つまり執筆期間 19 ヶ月!

▪ 無駄に大変だったんですよ!マジで!

▪ みなさん褒めてください!

Page 6: ここが変だよDalvik仮想マシン

ここでニュースDalvik仮想マシンご臨終

おーこれは ! Dalvik消されるのか。“Dalvik is dead, long live Dalvik!” https

://android.googlesource.com/platform/dalvik/+/66398b57e33cba0c38d2aa510712bf3e6fbc7645 …

Dalvik本書いてる人の事を脳裏にうかべてうおおぉぉぉぉおってなってる

Page 7: ここが変だよDalvik仮想マシン

これは昔こういうのがありましたよね

▪ Googe Wa○e の本を書いてた人が昔いましたよね

▪ Google よ、同じ罪を犯すのか…

Page 8: ここが変だよDalvik仮想マシン

俺はようやくのぼりはじめたばかりだからなこのはてしなく遠い Dalvik坂をよ! (お約束 )

Page 9: ここが変だよDalvik仮想マシン

Dalvikの後継の ART

▪ 流れ的に続きの本を書くことになりそうです

▪ 書かないと成仏できない

左の拳で Dalvikを殴った後の返す右の拳でART本、期待してます!今年度中には出るよね?

Page 10: ここが変だよDalvik仮想マシン

俺の憎しみを浄化するために今日は思いっきり Dalvik仮想マシンを disります

Page 11: ここが変だよDalvik仮想マシン

Dalvik仮想マシンの変なところ①オレオレアロケータ

▪ Dalvik 仮想マシンにはクラスローダ専用の「リニアアロケータ」というアロケータがあります。

Page 12: ここが変だよDalvik仮想マシン

リニアロケータとは

▪ ヒープ領域の先頭から順番にメモリを割り当てていきます

▪ 以下の様なデータがリニアアロケータでアロケートされます▪ クラスのフィールドの情報▪ クラスのメソッドの情報▪ vtable

Page 13: ここが変だよDalvik仮想マシン

断片化は大丈夫なの?

▪ 一度ロードしたクラスはアンロードされないから大丈夫!

▪ というか Dalvik 仮想マシンではクラスはアンロードできない!

▪ でもそのかわりアロケーションが高速だよ!

▪ えっ、そんなことのためにオレオレアロケータ?…

Page 14: ここが変だよDalvik仮想マシン

補足

▪ C 言語では一般的によっぽどのことがない限りオレオレアロケータは重罪です

Page 15: ここが変だよDalvik仮想マシン

気を取り直して

Page 16: ここが変だよDalvik仮想マシン

Dalvik仮想マシンの変なところ②オレオレコンテナ

▪ オレオレコンテナてんこもりです

Page 17: ここが変だよDalvik仮想マシン

オレオレコンテナ一覧

▪ PointerSet

▪ アドレスでソート済みのポインタを格納する配列

▪ ReferenceTable

▪ VM で使用してるオブジェクトを GC から保護する配列

▪ IndirectRefTable

▪ JNI で使用してるオブジェクトを GC から保護する配列

Page 18: ここが変だよDalvik仮想マシン

オレオレコンテナ一覧

▪ HashTable

▪ いつものやつ

▪ BitVector

▪ フラグの配列

▪ GrowableList

▪ 可変長配列

Page 20: ここが変だよDalvik仮想マシン

補足

▪ C++ では一般的によっぽどのことがない限りオレオレコンテナは重罪です

Page 21: ここが変だよDalvik仮想マシン

こうなっている理由

▪ Google のコード規約では例外が使えない▪ http://www.textdrop.net/google-styleguide-ja/cppguide.xml

▪ 例外が使えないなら例外を含む STL は使えない

▪ 実際問題初期の Android のツールチェインはデフォルトで例外オフ、STL なし

▪ まあ、コーディング規約で決まってるんだから仕方ないですよね!

▪ そうですよね!

▪ 諦めましょう

Page 22: ここが変だよDalvik仮想マシン

Dalvik仮想マシンの変なところ③謎の巨大物体

▪ 不吉を予感するファイル名、 Globals.h

▪ Sublime Text で開いてみましょう

Page 23: ここが変だよDalvik仮想マシン

なんじゃこりゃー!

▪ DvmGlobals というグローバル変数が 1000行ぐらい続きます

▪ これは外部リンクにする必要があるのか?というグローバル変数がいっぱい

▪ このヘッダファイルは全部の cpp ファイルから参照されています

Page 24: ここが変だよDalvik仮想マシン

ここでおさらいモジュール結合度

▪ 内容結合( Content coupling)「高」

▪ 共通結合( Common coupling)

▪ 外部結合( External coupling)

▪ 制御結合( Control coupling)

▪ スタンプ結合( Stamp coupling)

▪ データ結合( Data coupling)

▪ メッセージ結合(Message coupling)「低」

Page 25: ここが変だよDalvik仮想マシン

あれ、なにか見えた気がするぞ

Page 26: ここが変だよDalvik仮想マシン

Page 27: ここが変だよDalvik仮想マシン

ご清聴ありがとうございました!

▪気が向いたら本買ってください