• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
ここが変だよDalvik仮想マシン
 

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

on

  • 283 views

 

Statistics

Views

Total Views
283
Views on SlideShare
269
Embed Views
14

Actions

Likes
0
Downloads
0
Comments
0

2 Embeds 14

https://twitter.com 12
http://s.deeeki.com 2

Accessibility

Categories

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

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

    • ここが変だよ 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/+/66398b57e3 3cba0c38d2aa510712bf3e6fbc7645 … 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)「低」
    • あれ、なにか見えた気がするぞ
    • ご静聴ありがとうございました! ▪ 気が向いたら本買ってください