Androidの中身
                           第26回NaCl社内勉強会

                              中村 成洋
                          ネットワーク応用通信研究所



Powered by Rabbit 0.6.1
今日のアジェンダ
今日のアジェンダ
 Androidの中身の話
 DalvikVMについて少し




                  2/19
Androidの中身
Linuxカーネル
 基本的にLinuxカーネルのみ使っている
 たとえばglibcは同梱していない
 bionicというBSD libcを改良したものを使
 う
  mallocはdlmalloc




                          4/19
Linuxデバイスドライバ
 ashmem
   Anonymous Shared Memory Subsystem(無
   名共有メモリサブシステム)
   このデバイスに対してmmapするとtmpfs経由で
   メモリ確保できる
   pin,unpinで簡単にキャッシュの実装ができるらし
   い
   Javaレベルからは「android.os.MemoryFile」で
   つかえる
                                     5/19
ashmemの便利なシーン
 Javaはメモリ管理が隠蔽されてしまっている
 組み込みでは困ることもあるよね
  OSからメモリを取って直接管理したいとか

 そんなときに使えそう




                         6/19
マルチタスク
 iPhoneはシングルタスク。。
 Androidはマルチタスク!
  ってか、これが普通なんですよね?




                     7/19
実現方法
 Linuxのfork()を使うよ
 1アプリ、1プロセス
 スレッドとかではない




                    8/19
なんでforkか?
 安全だから
 アプリに問題があって落ちても他のプロセス
 に影響を与えにくい
 Linuxにその辺り任せとけばいいじゃん




                        9/19
DalvikVM
DalvikVMって何?
 Android上のVM
 アプリはこのVM上で動作する




                  11/19
DalvikVM作者
 Dan Bornstein作
   Dalvikはアイスランド語
   「谷間の入り江」って意味
   地名




                    12/19
特徴
 JVMじゃない
  Javaバイトコードを使わない

 .dexファイルという独自形式のバイトコード
  jarを更に圧縮したようなファイル構成になってい
  るそう




                        13/19
特徴(2)
 レジスタマシン
  最近の主流はスタックマシン




                  14/19
なぜレジスタマシン?
 端末がARMなんで〜
 レジスタマシンにした方が効率いいし〜
  VM演算部分は全部ARMアセンブラで書いている
  最近はx86にも対応してる




                       15/19
特徴(3)
 GCは「マークスイープ」
  マークはBitmapMarking




                      16/19
なぜBitmapMarkingか?
 copy-on-write問題
   あれ、なんか聞いたことある。。

 アプリforkしまくり
 GCでマークすると共有メモリが私有領域に
 コピーされちゃう
 BitmapMarkingしましょう

                      17/19
詳細はGC本を待て!
おしまい

Androidの中身-第26回NaCl社内勉強会