GC本の企画自体も通るか微妙
✓ 編集者さんの力でなんとかしても
らった
✓ 「先見の明」がある
✓ 「本ではなく、人を売り出したい」
✓ 「本は出してみないと結果がわか
らない」
52/202
GC本のツクリカタ - Making of the GC book Powered by Rabbit 0.6.4
ノーマル編:まとめ
✓ GC本で2つの問題を解決
✓ GCを知らないけど興味がある人
に知識を提供
✓ 悶々としている人にガチな本を提
供
✓ マニアックな本でも売れた!! :)
102/202
GC本のツクリカタ - Making of the GC book Powered by Rabbit 0.6.4
104.
今日話すこと
✓ ノーマル編
✓ ガチムチ編
103/202
GC本のツクリカタ - Making of the GC book Powered by Rabbit 0.6.4
105.
今日話すこと
✓ ノーマル編
✓ ガチムチ編
✓ GCの実装を読むコツ
✓ GCバッドノウハウ集
✓ まぼろしの目次案
104/202
GC本のツクリカタ - Making of the GC book Powered by Rabbit 0.6.4
ファイル名から嗅ぎ分ける
✓ object.h => データ構造が!!
✓ alloc.c => アロケータ!!
✓ heap.c => ヒープ!!
✓ mark_sweep.c => GC!!
129/202
GC本のツクリカタ - Making of the GC book Powered by Rabbit 0.6.4
131.
grepで見つける
✓ gcでgrep => 大抵見つかる
✓ garbage collectionでgrep
✓ garbage collectorでgrep
✓ アルゴリズム名でgrep
130/202
GC本のツクリカタ - Making of the GC book Powered by Rabbit 0.6.4
HotspotVM実行フロー
✓ .java => .class
✓ .classはJavaバイトコードの固まり
✓ VMはバイトコードの命令セットを1
つずつ実行
156/202
GC本のツクリカタ - Making of the GC book Powered by Rabbit 0.6.4
158.
抽象的インタプリタ
✓ 実体はないけど型情報だけで実
行しちゃおう
✓1 + 1 = 2
✓ => int + int = int
✓ ローカル変数配列、スタック内に
入る型情報を記録
✓ => 参照マップ
157/202
GC本のツクリカタ - Making of the GC book Powered by Rabbit 0.6.4
とあるソースコード
class TwoDifferentLocalVars {
public static void main(String args[]){
int primitiveType = 1; // プリミティブ型
Object referenceType = new Object(); // 参照型(ポインタ)
}
}
159/202
GC本のツクリカタ - Making of the GC book Powered by Rabbit 0.6.4
グローバル変数、クラス変数等
の場合
✓ グローバル変数、クラス変数等
✓ 型情報によってコンパイル時に区別可
能
169/202
GC本のツクリカタ - Making of the GC book Powered by Rabbit 0.6.4
171.
ローカル変数配列の場合
✓ フレーム内のローカル変数
✓ ローカル変数配列の内容は実行時に
決まる
170/202
GC本のツクリカタ - Making of the GC book Powered by Rabbit 0.6.4
172.
駄目なケース
if (条件) {
Object referenceType = new Object();
} else {
int primitiveType = 1;
}
✓ 条件によってローカル変数配列内
の情報が変化
171/202
GC本のツクリカタ - Making of the GC book Powered by Rabbit 0.6.4
G1GCとは
✓ OpenJDK7に入ってる
✓ Garbage-First Garbage Collection
✓ サーバタイプ
✓ 大容量のメモリ使う
✓ 停止時間を気にする
174/202
GC本のツクリカタ - Making of the GC book Powered by Rabbit 0.6.4
176.
概要
✓ Javaヒープを「リージョン」単位に
分割
✓ トレインGCに似ている
175/202
GC本のツクリカタ - Making of the GC book Powered by Rabbit 0.6.4
ゴミの割合がわかるということ
は
✓ 一つのリージョンにかかるGC時間
もわかるはず
✓ マシンパワーに依存する計算時間
も加味
✓ GC時に実際に計測して予測精度を高
める
190/202
GC本のツクリカタ - Making of the GC book Powered by Rabbit 0.6.4
192.
停止時間の設定
✓ ユーザが「これくらいの停止時間
で!」というのを設定できる
✓ それを越えないようにGC対象の
リージョンを選択
191/202
GC本のツクリカタ - Making of the GC book Powered by Rabbit 0.6.4
参考文献
✓ JavaOneの発表資料
✓ http://developers.sun.com/learning/
javaoneonline/2008/pdf/TS-5419.pdf
✓ 論文
✓ URL忘れたけど公開してた
✓ 注:発狂するほど難しい
194/202
GC本のツクリカタ - Making of the GC book Powered by Rabbit 0.6.4
196.
せっかく
ここまでがんばったので
✓ 「実装編:HotspotVMのGC」章を
出したいなあ
✓ 電子書籍?
✓ まだわかりません><
195/202
GC本のツクリカタ - Making of the GC book Powered by Rabbit 0.6.4