53. GC本の企画自体も通るか微妙
✓ 編集者さんの力でなんとかしても
らった
✓ 「先見の明」がある
✓ 「本ではなく、人を売り出したい」
✓ 「本は出してみないと結果がわか
らない」
52/202
GC本のツクリカタ - Making of the GC book Powered by Rabbit 0.6.4
103. ノーマル編:まとめ
✓ 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
151. HotspotVM
✓ スタックマシン
✓ スタックマシンとは(ry
150/202
GC本のツクリカタ - Making of the GC book Powered by Rabbit 0.6.4
152. JVMスタック
✓ メソッド呼び出し時にフレームを積
む
151/202
GC本のツクリカタ - Making of the GC book Powered by Rabbit 0.6.4
153. ポインタと即値の区別
✓ プリミティブ型はJVMの中でも数
値として扱っている
✓ プリミティブ型の値がフレーム内
に混ざってしまう
✓ 区別しなければ保守的GCとなる
152/202
GC本のツクリカタ - Making of the GC book Powered by Rabbit 0.6.4
154. ポインタと即値の区別
✓ フレーム内
✓ ローカル変数配列
✓ オペランドスタック
✓ 即値? ポインタ? わからん…
153/202
GC本のツクリカタ - Making of the GC book Powered by Rabbit 0.6.4
157. 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
160. とあるソースコード
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
167. pc( 9)=>pc( 10)
// Object referenceType = new Object();
pc( 9): locals = 'rv.', stack = 'r' // astore_2
// astore_'n' :
// ローカル変数配列の'n'番目にオペランドスタックの
// 先頭の参照型の値を格納する
pc(10): locals = 'rvr', stack = ''
166/202
GC本のツクリカタ - Making of the GC book Powered by Rabbit 0.6.4
168. 参照マップ
✓ 一命令毎のJVMフレームの情報
を持つ
✓ 現在JVMスタックに積まれているフレー
ム全て
✓ 情報 => 「参照型」「プリミティブ
型」を区別する地図
167/202
GC本のツクリカタ - Making of the GC book Powered by Rabbit 0.6.4
170. グローバル変数、クラス変数等
の場合
✓ グローバル変数、クラス変数等
✓ 型情報によってコンパイル時に区別可
能
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
191. ゴミの割合がわかるということ
は
✓ 一つのリージョンにかかる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
195. 参考文献
✓ 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