Upload
kmt-t
View
5.714
Download
3
Embed Size (px)
Citation preview
ここが変だよDalvik仮想マシン (古い )僻地のプログラマ kmt-t
自己紹介
▪ ハンドルネーム▪ kmt-t または kmt_t
▪ 業務系アプリケーションエンジニア▪ 2 年前まで組み込みやってました▪ 心はいまだに組み込みエンジニア
▪ 得意分野▪ 画像処理 (2D&3D)/ ファイルシステム / 仮想マシン /C++/C#
こんなところから来ました
▪ 鳥取県と島根県、どっちが右でどっちが左かわかりますか?
▪ 特急二本乗り換えなのでめっちゃ移動しんどいです
告知
▪ 2014 年 7 月~ 8 月あたりに本出します!
▪ Android の Dalvik 仮想マシンの解説本!
▪ 出版社は達人出版会!
▪ 表紙は萌え~な感じでデザインしてもらいました!
ちょっとだけ褒めてほしい
▪ 本の執筆開始は 2012 年 12 月
▪ つまり執筆期間 19 ヶ月!
▪ 無駄に大変だったんですよ!マジで!
▪ みなさん褒めてください!
ここでニュースDalvik仮想マシンご臨終
おーこれは ! Dalvik消されるのか。“Dalvik is dead, long live Dalvik!” https
://android.googlesource.com/platform/dalvik/+/66398b57e33cba0c38d2aa510712bf3e6fbc7645 …
Dalvik本書いてる人の事を脳裏にうかべてうおおぉぉぉぉおってなってる
これは昔こういうのがありましたよね
▪ Googe Wa○e の本を書いてた人が昔いましたよね
▪ Google よ、同じ罪を犯すのか…
俺はようやくのぼりはじめたばかりだからなこのはてしなく遠い Dalvik坂をよ! (お約束 )
Dalvikの後継の ART
▪ 流れ的に続きの本を書くことになりそうです
▪ 書かないと成仏できない
左の拳で Dalvikを殴った後の返す右の拳でART本、期待してます!今年度中には出るよね?
俺の憎しみを浄化するために今日は思いっきり Dalvik仮想マシンを disります
Dalvik仮想マシンの変なところ①オレオレアロケータ
▪ Dalvik 仮想マシンにはクラスローダ専用の「リニアアロケータ」というアロケータがあります。
リニアロケータとは
▪ ヒープ領域の先頭から順番にメモリを割り当てていきます
▪ 以下の様なデータがリニアアロケータでアロケートされます▪ クラスのフィールドの情報▪ クラスのメソッドの情報▪ vtable
断片化は大丈夫なの?
▪ 一度ロードしたクラスはアンロードされないから大丈夫!
▪ というか Dalvik 仮想マシンではクラスはアンロードできない!
▪ でもそのかわりアロケーションが高速だよ!
▪ えっ、そんなことのためにオレオレアロケータ?…
補足
▪ C 言語では一般的によっぽどのことがない限りオレオレアロケータは重罪です
気を取り直して
Dalvik仮想マシンの変なところ②オレオレコンテナ
▪ オレオレコンテナてんこもりです
オレオレコンテナ一覧
▪ PointerSet
▪ アドレスでソート済みのポインタを格納する配列
▪ ReferenceTable
▪ VM で使用してるオブジェクトを GC から保護する配列
▪ IndirectRefTable
▪ JNI で使用してるオブジェクトを GC から保護する配列
オレオレコンテナ一覧
▪ HashTable
▪ いつものやつ
▪ BitVector
▪ フラグの配列
▪ GrowableList
▪ 可変長配列
オレオレコンテナの使い方
▪ テンプレートなどつかってないので当然毎回キャストです
BasicBlock *bb = (BasicBlock *) dvmGrowableListGetElement(blockList, blockIdx);
補足
▪ C++ では一般的によっぽどのことがない限りオレオレコンテナは重罪です
こうなっている理由
▪ Google のコード規約では例外が使えない▪ http://www.textdrop.net/google-styleguide-ja/cppguide.xml
▪ 例外が使えないなら例外を含む STL は使えない
▪ 実際問題初期の Android のツールチェインはデフォルトで例外オフ、STL なし
▪ まあ、コーディング規約で決まってるんだから仕方ないですよね!
▪ そうですよね!
▪ 諦めましょう
Dalvik仮想マシンの変なところ③謎の巨大物体
▪ 不吉を予感するファイル名、 Globals.h
▪ Sublime Text で開いてみましょう
なんじゃこりゃー!
▪ DvmGlobals というグローバル変数が 1000行ぐらい続きます
▪ これは外部リンクにする必要があるのか?というグローバル変数がいっぱい
▪ このヘッダファイルは全部の cpp ファイルから参照されています
ここでおさらいモジュール結合度
▪ 内容結合( Content coupling)「高」
▪ 共通結合( Common coupling)
▪ 外部結合( External coupling)
▪ 制御結合( Control coupling)
▪ スタンプ結合( Stamp coupling)
▪ データ結合( Data coupling)
▪ メッセージ結合(Message coupling)「低」
あれ、なにか見えた気がするぞ
…
ご清聴ありがとうございました!
▪気が向いたら本買ってください