GC本のツクリカタ
                                      Making of the GC book

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

GC本のツクリカタ - Making of the GC book                    Powered by Rabbit 0.6.4
自己紹介
自己紹介


       ✓ nari/中村 成洋です
       ✓ 福岡生まれ、島根在住
       ✓ NaCl勤務


                                                    2/202
GC本のツクリカタ - Making of the GC book          Powered by Rabbit 0.6.4
自己紹介


       ✓ GC歴 3.5年(駆け出し)
       ✓ アイス工場歴 3年
              ✓ 大体一緒くらい



                                                    3/202
GC本のツクリカタ - Making of the GC book          Powered by Rabbit 0.6.4
アンケート
GC本を持っている人?
     ノシ
おお…
サインします!!
全部読んだ人?
  ノシ
なんと…
今日お話しする内容!!
注:GC本の内容自体には
  あまり触れません
(が、読んでおかないと分か
  らない箇所もありそう)
今日話すこと
GC本に習って二部構成に
    しました
今日話すこと


       ✓ ノーマル編
       ✓ ガチムチ編


                                                    15/202
GC本のツクリカタ - Making of the GC book            Powered by Rabbit 0.6.4
今日話すこと


       ✓ ノーマル編
              ✓ GC本のツクリカタ

       ✓ ガチムチ編


                                                    16/202
GC本のツクリカタ - Making of the GC book            Powered by Rabbit 0.6.4
今日話すこと


       ✓ ノーマル編
              ✓ GC本のツクリカタ

       ✓ ガチムチ編


                                                    17/202
GC本のツクリカタ - Making of the GC book            Powered by Rabbit 0.6.4
ノーマル編
GC本のツクリカタ
相川(共著者)さんとの
    出会い
3年前、突然のメール
内容

       ✓ 大卒の論文でGCのWikiを参考に
         したそう
              ✓ GCで有名な京都の方にある研究室(Y
                研)

       ✓ GCLover同士の出会い

                                                22/202
GC本のツクリカタ - Making of the GC book        Powered by Rabbit 0.6.4
その後

       ✓ 院でRubyのGCを研究
       ✓ 相川さんが笹田さんにお世話にな
         る
       ✓ 回り回ってまたお知り合いに

                                                 23/202
GC本のツクリカタ - Making of the GC book         Powered by Rabbit 0.6.4
GC勉強会

       ✓ 毎週Skypeで「GC勉強会」
       ✓ GCの論文の話しとか
       ✓ このとき「G1GC」を題材にしたが
         理解できず

                                                   24/202
GC本のツクリカタ - Making of the GC book           Powered by Rabbit 0.6.4
共著のお願い
nari「一緒に書きません
      か?」
aikawa「修論が…」
死亡フラグktkr!
卒業できて良かった
  (つд⊂)エーン
竹内先生(監修者)との出
     会い
相川さん=>笹田研=>竹内研

       ✓ よく分からないけどこんな感じで
         お願いできた
       ✓ 退官される忙しい時期にお願い
       ✓ 快く了承してもらう

                                           31/202
GC本のツクリカタ - Making of the GC book   Powered by Rabbit 0.6.4
すべての原稿をレビュー

       ✓ 特にアルゴリズム編はよく読んで
         いただいた
       ✓ 多くの原稿は電車の中で読まれ
         たそう

                                           32/202
GC本のツクリカタ - Making of the GC book   Powered by Rabbit 0.6.4
ドラクエ7問題

       ✓ ドラクエ7がレビュー時期に発売
       ✓ 竹内先生はドラクエが好き
       ✓ 電車の中でプレイ可能な
         NintendoDS

                                                     33/202
GC本のツクリカタ - Making of the GC book             Powered by Rabbit 0.6.4
あとは言わなくても
 分かりますよね!
とはいえ遅れなく


       ✓ さまざま指摘を頂いた
       ✓ 優しくも厳しい、絶妙
       ✓ レビュー結果は真鵺道にて記述


                                              35/202
GC本のツクリカタ - Making of the GC book      Powered by Rabbit 0.6.4
とっても勉強なりました
最終講義でも「GC本」紹介
 してもらいました(;-;)
まつもとさん
(Ruby作者兼帯職人)
    との出会い
会社の飲み会終わりに
nari「今度、GCの本を書く
    ことになりました」
matz「おお、すごい」
nari「GC本の帯をお願いし
    たいのですが…」
matz「いいよー」
nari「(´;ω;`)ブワッ」
素晴らしい帯

                         古(いにしえ)からの魔
                         法、ガベージコレクショ
                         ンの秘密を完全解説
           [「ガベージコレクションのアルゴリズムと実装 − 帯」より
                                     引用]


                                                    45/202
GC本のツクリカタ - Making of the GC book            Powered by Rabbit 0.6.4
その他にもさまざまな出会い

       ✓ 編集者さん
       ✓ レビューアのみなさん
       ✓ Evan Phoenix
       ✓ 読書会を開いてくれる&来てくれ
         るみなさん
                                           46/202
GC本のツクリカタ - Making of the GC book   Powered by Rabbit 0.6.4
出会いの中心にあった『GC
     本』
最初は苦難の道のり
GC本構想時の反応
GC本出すよ!


       ✓ 誰得ですか?
       ✓ 私は買いますが、他に誰か買いま
         すか?


                                                     50/202
GC本のツクリカタ - Making of the GC book             Powered by Rabbit 0.6.4
( ´∀`)つ□ 涙拭けよ
GC本の企画自体も通るか微妙
       ✓ 編集者さんの力でなんとかしても
         らった
       ✓ 「先見の明」がある
       ✓ 「本ではなく、人を売り出したい」
       ✓ 「本は出してみないと結果がわか
         らない」
                                           52/202
GC本のツクリカタ - Making of the GC book   Powered by Rabbit 0.6.4
が、おかげさまで好評です。
  感謝感謝m(_ _)m
なぜここまで好評であった
     か?
たぶん「2つの問題」を
 解決しているから
2つの問題とは?
問題点(1)
「若者のGC離れ」
  が深刻化
ある懇親会での出来事
学生さん「GCに興味がある
    んですよ」
nari「はいはい」
学生さん「GCってどうなっ
  てるんですか?」
nari「えーと、まずルートとい
      うものが…」
…
また、違う懇親会で
学生さん「GCに興味がある
     んです」
nari「えぇえぇ」
学生さん「コピーGCって保
 守的GCなんですか?」
nari「えーと、まずルートとい
      うものが…」
…
これは疲れる!
なぜ知らないのか?
原因

       ✓ 日本語でGCについて詳細に書か
         れた本がない
              ✓ 英語の本はある(RJGC)

       ✓ アルゴリズムは知っていてもイマ
         イチ実装と結びついてない

                                                73/202
GC本のツクリカタ - Making of the GC book        Powered by Rabbit 0.6.4
では、どうすればよいか?
解決策
日本語のGC本を書く!
思い描いたGC本の構想
アルゴリズム 3 : 実装 7
理由


       ✓ 単純にアルゴリズムを使用する
         ケースは少ない
       ✓ RJGCと違うものを


                                                79/202
GC本のツクリカタ - Making of the GC book        Powered by Rabbit 0.6.4
理由

       ✓ いろんな言語処理系のGC実装を
         紹介した本は世界的にない
       ✓ アルゴリズムはGCの一面でしか
         ない(実装ありき)

                                                80/202
GC本のツクリカタ - Making of the GC book        Powered by Rabbit 0.6.4
問題の解決は?

       ✓ 知識の底上げはできた(気がす
         る)
              ✓ すくなくとも「GC本読んでください」と
                言える!

       ✓ GCを実装する人が増えてくれ
         る…といいなぁ
                                               81/202
GC本のツクリカタ - Making of the GC book       Powered by Rabbit 0.6.4
問題点(2)
初心者向けの
本が多すぎる
見渡せば入門書ばかり


       ✓ 初めてのXX
       ✓ XX入門


                                           84/202
GC本のツクリカタ - Making of the GC book   Powered by Rabbit 0.6.4
もちろん入門書は欲しいけ
      ど
重複した入門書は欲しくな
     い
私はもっとガチな本が読み
     たい!
我々が愛したガチ本

       ✓ RHG(Rubyソースコード完全解
         説)
       ✓ ハッカーの楽しみ
       ✓ Java仮想マシン仕様書
       ✓ etc..
                                           88/202
GC本のツクリカタ - Making of the GC book   Powered by Rabbit 0.6.4
解決策
ガチな本を書こう!
GC本の構成


       ✓ アルゴリズム編
       ✓ 実装編


                                                    91/202
GC本のツクリカタ - Making of the GC book            Powered by Rabbit 0.6.4
こういう構成はあまりない
 


    http://twitter.com/kinaba/status/10027309487
本を書くときのポリシー
逃げない
ごまかさない
具体的には


       ✓ いろんな言語処理系を読んだ
              ✓ 言語処理系によってGCはさまざま
              ✓ しんどかった…



                                                   97/202
GC本のツクリカタ - Making of the GC book           Powered by Rabbit 0.6.4
具体的には

       ✓ なぜこの実装を書いたのか?とい
         う点を追求
       ✓ 泥臭い実装も説明
              ✓ DalvikVMとかどうしようと思った。泣け
                た。


                                                   98/202
GC本のツクリカタ - Making of the GC book           Powered by Rabbit 0.6.4
 


    http://twitter.com/miura1729/status/10082548659
おかげでガチな内容になっ
   たと思います
    m(_ _)m
ノーマル編:まとめ
ノーマル編:まとめ
       ✓ GC本で2つの問題を解決
       ✓ GCを知らないけど興味がある人
         に知識を提供
       ✓ 悶々としている人にガチな本を提
         供
              ✓ マニアックな本でも売れた!! :)
                                            102/202
GC本のツクリカタ - Making of the GC book      Powered by Rabbit 0.6.4
今日話すこと


       ✓ ノーマル編
       ✓ ガチムチ編


                                                  103/202
GC本のツクリカタ - Making of the GC book            Powered by Rabbit 0.6.4
今日話すこと

       ✓ ノーマル編
       ✓ ガチムチ編
              ✓ GCの実装を読むコツ
              ✓ GCバッドノウハウ集
              ✓ まぼろしの目次案

                                                  104/202
GC本のツクリカタ - Making of the GC book            Powered by Rabbit 0.6.4
ガチムチ編
GCの実装を読むコツ
誰得…orz
GCを読む前の準備
前準備(1)


       ✓ Emacsを使う
              ✓ Emacs!Emacs!!!!
              ✓ Emacs!Emacs!!!!



                                                  109/202
GC本のツクリカタ - Making of the GC book            Powered by Rabbit 0.6.4
前準備(2)



       ✓ GCのアルゴリズムを把握



                                                  110/202
GC本のツクリカタ - Making of the GC book            Powered by Rabbit 0.6.4
前準備(3):3つの「g」
       ✓ gdb
              ✓ 言語処理系自体を動かせる状態に

       ✓ gtags
              ✓ 関数の呼び出し箇所を発見できる

       ✓ git
              ✓ git grep!!
                                           111/202
GC本のツクリカタ - Making of the GC book     Powered by Rabbit 0.6.4
すべてEmacs上で使う
前準備(4)


       ✓ 行数を数えて落ち着く
              ✓ 言語処理系全体行数、GC行数を見る




                                                  113/202
GC本のツクリカタ - Making of the GC book            Powered by Rabbit 0.6.4
準備後は
こんな順番で読んでいく


          1. データ構造
          2. ヒープ構造&アロケータ
          3. GC


                                         115/202
GC本のツクリカタ - Making of the GC book   Powered by Rabbit 0.6.4
GC三角関係




                                                  116/202
GC本のツクリカタ - Making of the GC book            Powered by Rabbit 0.6.4
データ構造


       ✓ オブジェクトがどのような構成に
         なっているか?
       ✓ ヘッダはどうなってる?


                                                 117/202
GC本のツクリカタ - Making of the GC book           Powered by Rabbit 0.6.4
ヒープ&アロケータ

       ✓ GCと密接に関係
       ✓ GCを切り替えるときはヒープの構
         造も切り替わることが多い
       ✓ それにともなってアロケータも変わ
         る

                                          118/202
GC本のツクリカタ - Making of the GC book    Powered by Rabbit 0.6.4
GC


       ✓ 今までで雰囲気を掴んでいるはず
       ✓ GCアルゴリズムをイメージしなが
         ら


                                              119/202
GC本のツクリカタ - Making of the GC book        Powered by Rabbit 0.6.4
まとめ
GC三角関係を意識し
適切な順に読んでいくのが
     大事
今日話すこと

       ✓ ノーマル編
       ✓ ガチムチ編
              ✓ GCの実装を読むコツ
              ✓ GCバッドノウハウ集
              ✓ まぼろしの目次案

                                                  122/202
GC本のツクリカタ - Making of the GC book            Powered by Rabbit 0.6.4
GCバッドノウハウ集
2つだけ


          1. GCの臭い
          2. 謎の0xAB


                                                124/202
GC本のツクリカタ - Making of the GC book          Powered by Rabbit 0.6.4
1. GCの臭い
よくあること
「GCに関連する処理を見つ
     けたいっ!」
「Don't think, FEEL!」
ファイル名から嗅ぎ分ける

       ✓ object.h => データ構造が!!
       ✓ alloc.c => アロケータ!!
       ✓ heap.c => ヒープ!!
       ✓ mark_sweep.c => GC!!

                                         129/202
GC本のツクリカタ - Making of the GC book   Powered by Rabbit 0.6.4
grepで見つける

       ✓ gcでgrep => 大抵見つかる
       ✓ garbage collectionでgrep
       ✓ garbage collectorでgrep
       ✓ アルゴリズム名でgrep

                                                130/202
GC本のツクリカタ - Making of the GC book          Powered by Rabbit 0.6.4
2. 謎の0xAB
オブジェクトを割り当て




                                         132/202
GC本のツクリカタ - Making of the GC book   Powered by Rabbit 0.6.4
前後に謎の0xAB




                                             133/202
GC本のツクリカタ - Making of the GC book       Powered by Rabbit 0.6.4
ナニコレ?




                                                 134/202
GC本のツクリカタ - Making of the GC book           Powered by Rabbit 0.6.4
ヒント


       ✓ デバッグ時のみしか使わない
       ✓ メモリ系のバグは死ねる


                                               135/202
GC本のツクリカタ - Making of the GC book         Powered by Rabbit 0.6.4
分かる人いますか?
答え
メモリ破壊を検知するため
0xABの正体

       ✓ delete時(C++)に0xABをチェック
       ✓ 0xABのままならOK!
       ✓ 書き換わってたらメモリ破壊が
         あった!

                                                   139/202
GC本のツクリカタ - Making of the GC book             Powered by Rabbit 0.6.4
メモリ破壊系のバグはしんどい

       ✓ どこで書き換わったか見つけるの
         が難しい
       ✓ gdbのwatchとか使う?
       ✓ 良い方法があれば教えてください
         ><

                                         140/202
GC本のツクリカタ - Making of the GC book   Powered by Rabbit 0.6.4
その他、気づいた所は本に
    書きました
今日話すこと

       ✓ ノーマル編
       ✓ ガチムチ編
              ✓ GCの実装を読むコツ
              ✓ GCバッドノウハウ集
              ✓ まぼろしの目次案

                                                  142/202
GC本のツクリカタ - Making of the GC book            Powered by Rabbit 0.6.4
まぼろしの目次案
アルゴリズム編で抜けた章


       ✓ 並列GC
       ✓ 並行GC


                                         144/202
GC本のツクリカタ - Making of the GC book   Powered by Rabbit 0.6.4
実装編で抜けた章


       ✓ HotspotVMのGC
       ✓ GCを作ってみよう!


                                          145/202
GC本のツクリカタ - Making of the GC book    Powered by Rabbit 0.6.4
紹介する予定だったアルゴリズ
          ム

       ✓ TreadmillGC
       ✓ MappingCollector
       ✓ etc...

                                         146/202
GC本のツクリカタ - Making of the GC book   Powered by Rabbit 0.6.4
HotspotVM(OpenJDK7)


       ✓ 2ヶ月くらい掛けていた!!
       ✓ 50ページくらい書いていた!!
       ✓ タイムオーバー…orz

                                         147/202
GC本のツクリカタ - Making of the GC book   Powered by Rabbit 0.6.4
なのでこの場を借りて説明
    します><
正確なGCへの道:
 HotspotVM編
HotspotVM


       ✓ スタックマシン
              ✓ スタックマシンとは(ry




                                                     150/202
GC本のツクリカタ - Making of the GC book               Powered by Rabbit 0.6.4
JVMスタック




       ✓ メソッド呼び出し時にフレームを積
         む
                                                   151/202
GC本のツクリカタ - Making of the GC book             Powered by Rabbit 0.6.4
ポインタと即値の区別

       ✓ プリミティブ型はJVMの中でも数
         値として扱っている
       ✓ プリミティブ型の値がフレーム内
         に混ざってしまう
       ✓ 区別しなければ保守的GCとなる

                                         152/202
GC本のツクリカタ - Making of the GC book   Powered by Rabbit 0.6.4
ポインタと即値の区別

       ✓ フレーム内
       ✓ ローカル変数配列
       ✓ オペランドスタック
       ✓ 即値? ポインタ? わからん…

                                         153/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
抽象的インタプリタ
       ✓ 実体はないけど型情報だけで実
         行しちゃおう
              ✓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
Javaバイトコードが
透けて見えますよね
こうなる


            pc( 0): iconst_1
            pc( 1): istore_1
            pc( 2): new       #2 // class java/lang/Object
            pc( 5): dup
            pc( 6): invokespecial #1 // Method java/lang/Object."<init>"
            pc( 9): astore_2
            pc(10): return



                                                                         161/202
GC本のツクリカタ - Making of the GC book                                   Powered by Rabbit 0.6.4
pc( 0)=>pc( 1)

            // int primitiveType = 1;
            pc( 0): locals = 'r..', stack = '' // iconst_1
            // iconst_'i' :
            // 'i'の部分にあたるintの定数をオペランドスタックに積む
            pc( 1): locals = 'r..', stack = 'v'


    ✓ reference : 参照型(ポインタ)、
      value : プリミティブ型
                                                           162/202
GC本のツクリカタ - Making of the GC book                     Powered by Rabbit 0.6.4
pc( 1)=>pc( 2)


           // int primitiveType = 1;
           pc( 1): locals = 'r..', stack = 'v' // istore_1
           // istore_'n' :
           // ローカル変数配列の'n'番目に
           // オペランドスタックの先頭のint型の値を格納する
           pc( 2): locals = 'rv.', stack = ''


                                                           163/202
GC本のツクリカタ - Making of the GC book                     Powered by Rabbit 0.6.4
pc( 2)=>pc( 5)


           // Object referenceType = new Object();
           pc( 2): locals = 'rv.', stack = '' // new #2
           // new :
           // 新たなオブジェクトを生成し、オペランドスタックに積む
           pc( 5): locals = 'rv.', stack = 'r'




                                                          164/202
GC本のツクリカタ - Making of the GC book                    Powered by Rabbit 0.6.4
ちょっと飛ばして
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
参照マップ

       ✓ 一命令毎のJVMフレームの情報
         を持つ
              ✓ 現在JVMスタックに積まれているフレー
                ム全て

       ✓ 情報 => 「参照型」「プリミティブ
         型」を区別する地図
                                                 167/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
ローカル変数配列の場合


       ✓ フレーム内のローカル変数
              ✓ ローカル変数配列の内容は実行時に
                決まる



                                         170/202
GC本のツクリカタ - Making of the GC book   Powered by Rabbit 0.6.4
駄目なケース

            if (条件) {
               Object referenceType = new Object();
            } else {
               int primitiveType = 1;
            }

    ✓ 条件によってローカル変数配列内
      の情報が変化
                                                     171/202
GC本のツクリカタ - Making of the GC book               Powered by Rabbit 0.6.4
続いて
G1GC
G1GCとは

       ✓ OpenJDK7に入ってる
       ✓ Garbage-First Garbage Collection
       ✓ サーバタイプ
              ✓ 大容量のメモリ使う
              ✓ 停止時間を気にする

                                                  174/202
GC本のツクリカタ - Making of the GC book            Powered by Rabbit 0.6.4
概要


       ✓ Javaヒープを「リージョン」単位に
         分割
       ✓ トレインGCに似ている


                                              175/202
GC本のツクリカタ - Making of the GC book        Powered by Rabbit 0.6.4
従来のCMS(Cuncurrent 
  Mark Sweep)
 


http://developers.sun.com/learning/javaoneonline/2008/pdf/TS-5419.pdf
 


http://developers.sun.com/learning/javaoneonline/2008/pdf/TS-5419.pdf
G1GC
 


http://developers.sun.com/learning/javaoneonline/2008/pdf/TS-5419.pdf
 


http://developers.sun.com/learning/javaoneonline/2008/pdf/TS-5419.pdf
 


http://developers.sun.com/learning/javaoneonline/2008/pdf/TS-5419.pdf
G1GCの特徴

       ✓ 並行GC
              ✓ 並列でできることは並列化(凄い)

       ✓ リージョン内のゴミ割合が分かる
       ✓ 停止時間が予測可能

                                                   183/202
GC本のツクリカタ - Making of the GC book             Powered by Rabbit 0.6.4
リージョン内のゴミ割合が
    分かる?
リージョン毎の記憶集合




                                         185/202
GC本のツクリカタ - Making of the GC book   Powered by Rabbit 0.6.4
記憶集合


       ✓ 記憶集合からゴミが割り出せる
       ✓ ゴミが多いリージョンがわかる


                                                186/202
GC本のツクリカタ - Making of the GC book          Powered by Rabbit 0.6.4
Garbage-First




       ✓ ゴミが多いリージョンを優先的に
         GC
                                                         187/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
停止時間の設定

       ✓ ユーザが「これくらいの停止時間
         で!」というのを設定できる
       ✓ それを越えないように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
せっかく
                 ここまでがんばったので

       ✓ 「実装編:HotspotVMのGC」章を
         出したいなあ
       ✓ 電子書籍?
              ✓ まだわかりません><

                                         195/202
GC本のツクリカタ - Making of the GC book   Powered by Rabbit 0.6.4
まとめ
まとめ

       ✓ HotspotVMは大変だった
       ✓ G1GCの論文も大変
              ✓ 俺の正月…どこいってしもたん…?

       ✓ 目次案は皮算用しない!

                                               197/202
GC本のツクリカタ - Making of the GC book         Powered by Rabbit 0.6.4
今回発表でいいたかった
たった一つのこと
なんやかんやで
 GCカワイイ!
ご静聴
ありがとうございました。
質疑応答
(GC本の内容に関すること
     でも可)

GC本のツクリカタ