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

6,952 views
6,765 views

Published on

Published in: Engineering
0 Comments
13 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
6,952
On SlideShare
0
From Embeds
0
Number of Embeds
283
Actions
Shares
0
Downloads
21
Comments
0
Likes
13
Embeds 0
No embeds

No notes for slide

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

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

×