内容紹介
本書はDalvik仮想マシンの内部についての解説書です。Dalvik仮想マシンの仕様、概念、実装などの深部を知りたい人のための本です。Android LからDalvikからARTへ仮想マシンの変更が予定されていますが、ARTの技術はDalvikの仕様、技術などを引き継いでいます。Dalvikを知りたい人だけでなく、ARTを理解するのに足がかりにするのにも最適な本になっています。
書誌情報
- 著者: 松永卓也
- 発行日: 2014-07-30
- 最終更新日: 2015-04-03
- バージョン: 1.0.0
- ページ数: 387ページ(PDF版換算)
- 対応フォーマット: PDF, EPUB
- 出版社: 達人出版会
対象読者
Dalvik仮想マシンの内部に興味のある上級者
著者について
松永卓也
鳥取県在住の地元大好きプログラマ。プログラマ歴15年のおっさん。ミドルウェア開発が得意。好物は鶏肉。人生迷走中。
目次
まえがき
- 執筆にあたり
- 本書の内容
- 対象読者
- 本書の読み方
- 各章の依存関係
- ソースの取得方法
- 謝辞
第1部 準備編
第1章 その前に
- 1.1 この章のポイント
- 1.2 基本用語
- 1.3 ソースコードリーディングのヒント
- 1.4 ソースコード構成
第2章 ハックツール - デバッガ
- 2.1 この章のポイント
- 2.2 GDBとDDDとは?
- 2.3 ホストOS用Dalvik仮想マシン
- 2.4 デバッガの実行方法
- 2.5 GDBで実際のデバッグ
第3章 ハックツール - dexdump
- 3.1 この章のポイント
- 3.2 dexdumpとは?
- 3.3 dexdumpの使い方
第2部 仕様編
第4章 アーキテクチャ
- 4.1 この章のポイント
- 4.2 仮想マシンとは?
- 4.3 Dalvik仮想マシン開発の背景
- 4.4 仮想CPUで使用する用語
- 4.5 仮想CPUのアーキテクチャ
- 4.6 Java仮想マシンとの比較
第5章 命令セット
- 5.1 この章のポイント
- 5.2 命令セットとは?
- 5.3 アセンブリ言語
- 5.4 エンコード規則
- 5.5 DEXデータを示すインデックス
- 5.6 64ビット整数値と倍精度浮動小数点
- 5.7 命令の概要
- 5.8 逆アセンブラの例
第6章 DEXファイル
- 6.1 この章のポイント
- 6.2 実行ファイルとは?
- 6.3 DEXファイルの概要
- 6.4 DEXファイルを構成するセクション
- 6.5 ヘッダセクション
- 6.6 文字列IDセクション
- 6.7 型IDセクション
- 6.8 プロトタイプIDセクション
- 6.9 フィールドIDセクション
- 6.10 メソッドIDセクション
- 6.11 クラス定義セクション
- 6.12 データセクション
- 6.13 DEXファイルの単位
- 6.14 DEXファイルのダンプ例
第3部 実装編
第7章 インタープリタ
- 7.1 この章のポイント
- 7.2 インタープリタとは?
- 7.3 解説で使用する用語
- 7.4 Dalvik仮想マシンのインタープリタ
- 7.5 単純なインタープリタ対スレッドインタープリタ
- 7.6 インタープリタに関連する情報
- 7.7 インタープリタの実行モード
第8章 Zygoteと起動フロー
- 8.1 この章のポイント
- 8.2 Zygoteとは?
- 8.3 フォークとプリロード
- 8.4 Linuxの基礎用語
- 8.5 Dalvik仮想マシンのプロセス
- 8.6 Zygoteの起動
- 8.7 Zygoteによるアプリケーションの起動
第9章 ABI
- 9.1 この章のポイント
- 9.2 ABIとは?
- 9.3 オブジェクトフォーマット
- 9.4 共通ヘッダ
- 9.5 データオブジェクト
- 9.6 配列オブジェクト
- 9.7 文字列オブジェクト
- 9.8 クラスオブジェクト
第10章 クラスローダ
- 10.1 この章のポイント
- 10.2 クラスローダとは?
- 10.3 クラスロードのフェーズ
- 10.4 ロードアルゴリズム
- 10.5 リンクアルゴリズム
- 10.6 初期化アルゴリズム
- 10.7 プリミティブ型
- 10.8 クラスローダの検索アルゴリズム
- 10.9 DEXファイルの外部リンク
- 10.10 リニアアロケータ
- 10.11 Dalvik仮想マシンとJAR地獄
第11章 ベリファイアとオプティマイザ
- 11.1 この章のポイント
- 11.2 ベリファイア、オプティマイザとは?
- 11.3 静的検証
- 11.4 抽象的インタープリタ
- 11.5 レジスタマップ
- 11.6 レジスタマップ生成アルゴリズム
- 11.7 最適化アルゴリズム
第12章 フィールドとメソッド
- 12.1 この章のポイント
- 12.2 フィールドアクセス
- 12.3 メソッド呼出し
- 12.4 リフレクション
- 12.5 例外
第13章 JITコンパイラ
- 13.1 この章のポイント
- 13.2 用語の整理
- 13.3 JITコンパイラの一般知識
- 13.4 高速化のポイント
- 13.5 基本概念
- 13.6 ソースコードリスト
- 13.7 コンパイルのアウトライン
- 13.8 コンパイルの詳細
- 13.9 機械語生成器
第14章 ガベージコレクション
- 14.1 この章のポイント
- 14.2 ガベージコレクションの一般知識
- 14.3 Dalvik仮想マシンのマークアンドスイープ
- 14.4 Dalvik仮想マシンのコピーガベージコレクション
第15章 JNI
- 15.1 この章のポイント
- 15.2 JNIとは?
- 15.3 JNIのインターフェイス
- 15.4 JNIプログラミングの例
- 15.5 ネイティブメソッドの紐付け
- 15.6 間接参照テーブル
- 15.7 隠蔽されたオブジェクトの実体
第16章 デバッガ
- 16.1 この章のポイント
- 16.2 デバッガの実装
- 16.3 JDWP仕様
- 16.4 JDWPパケット処理の流れ
- 16.5 ステップ実行とブレークポイント
第17章 DDMS
- 17.1 この章のポイント
- 17.2 DDMSとは?
- 17.3 DDMチャンクのハンドリング
- 17.4 DDMチャンク
第18章 パフォーマンスプロファイラ
- 18.1 この章のポイント
- 18.2 パフォーマンスプロファイラとは?
- 18.3 3つのトレース方法
- 18.4 スレッドCPUクロックとWallクロック
- 18.5 メソッドトレース
- 18.6 サンプルトレース
- 18.7 エミュレータトレース
第19章 ヒーププロファイラ
- 19.1 この章のポイント
- 19.2 ヒーププロファイラとは?
- 19.3 ヒーププロファイラの使い方
- 19.4 ヒープダンプの処理
- 19.5 ヒープメモリ領域情報の取得方法
- 19.6 ネイティブヒープのメモリリーク検出
第4部 周辺ツール編
第20章 DEXコンパイラ
- 20.1 この章のポイント
- 20.2 DEXコンパイラとは?
- 20.3 DEXコンパイラの使い方
- 20.4 ソースツリー
- 20.5 DEXコンパイラの内部表現
- 20.6 DEXコンパイラの処理
- 20.7 バイトコードの最適化
第21章 dexopt
- 21.1 この章のポイント
- 21.2 dexoptとは?
第22章 dexmaker
- 22.1 この章のポイント
- 22.2 dexmakerとは?
- 22.3 dexmakerの使い方
- 22.4 ProxyBuilder
- 22.5 Mockito
第5部 リファレンス編
第23章 命令セットリファレンス
- 23.1 この章のポイント
- 23.2 エンコード規則リファレンス
- 23.3 命令セットリファレンス
- 23.4 命令で使われるデータ一覧
第24章 DEXファイルリファレンス
- 24.1 この章のポイント
- 24.2 ヘッダセクション
- 24.3 文字列IDセクション
- 24.4 型IDセクション
- 24.5 プロトタイプIDセクション
- 24.6 フィールドIDセクション
- 24.7 メソッドIDセクション
- 24.8 クラス定義セクション
- 24.9 コードアイテム
- 24.10 エンコードされた値
- 24.11 アノテーション
- 24.12 デバッグ情報
- 24.13 マップアイテム
- 24.14 データセクションのデータ型
- 24.15 リンクセクション
第25章 DDMSリファレンス
- 25.1 この章のポイント
- 25.2 DDMSの概要
- 25.3 DDMチャンクリファレンス
第6部 巻末付録
第26章 開発環境構築
- 26.1 Android OSビルド環境
- 26.2 Androidアプリケーション開発環境
第27章 擬似コード
- 27.1 擬似コードの文法
- 27.2 擬似コード変数
- 27.3 擬似コード関数
第28章 用語リスト
- 28.1 アルファベット
- 28.2 ア行
- 28.3 カ行
- 28.4 サ行
- 28.5 タ行
- 28.6 ハ行
- 28.7 マ行
- 28.8 ラ行