読者です 読者をやめる 読者になる 読者になる

「ガベージコレクションのアルゴリズムと実装」という本を書きました。

gcbook gcai GC

追記 2014-09-03
達人出版会様で電子書籍が買えます。

ガベージコレクションのアルゴリズムと実装
中村 成洋, 相川 光, 竹内 郁雄(監修)
達人出版会
発行日: 2013-12-24
対応フォーマット: PDF, EPUB


GCLoverのみなさん、お待たせしました。
ガベージコレクションアルゴリズムと実装」の情報公開です。

書名:ガベージコレクションアルゴリズムと実装
著者:中村 成洋/相川 光
監修:竹内 郁雄
ページ数:472ページ
本体価格:3,200円
発売開始日:2010年3月18日(木)
※地域・書店によって遅れることがあります
ISBN:978-4-7980-2562-9 C3055

 

読み所

本書は次の2つのテーマを扱います。

 1.GCアルゴリズムアルゴリズム編)
 2.GCの実装(実装編)

アルゴリズム編では、これまでに考案されてきた数多くのGCアルゴリズムの中
から、重要なものを厳選して紹介します。伝統的かつ基本的なものから、やや
高度なアルゴリズムを選定しています。GC独特の考え方や各アルゴリズムの特
性などを理解していただくのがアルゴリズム編の最大の目的です。

実装編では、筆者らが選定した言語処理系のGCを読み進めていきます。
アルゴリズム編では理論をしっかり学び、実装編で理論がどのように使われて
いるのか、実際に見てみようというわけです。

ーーまえがきより抜粋

 
この本は分かりやすく書こうと努力しました。その結果、たぶん分かりやすく書けていると思います。
ですが、本書で取り扱う内容は本質的に難しいものなので、きっと読者のみなさんは難解に感じられるでしょう。
 
本書は、はっきりいって「ガチ」な本なのです。あまりのガチっぷりに、読むことを挫けてしまうかもしれません。
でもそんなときは、私が敬愛してやまないRHGの一文を思い出してください。
 

自分の能力より劣るものばかり相手にして面白いわけがない。
見た瞬間に答えがわかるパズルを解く奴はいない。
半分で犯人が分かる推理小説はつまらない。
能力をギリギリまで使い切り問題を解いてこそ本当に知識を自分のものにできる。

 
私はRHGを何度も読んだ口なのですが、本書もそれに負けず劣らず、マニアックな本になったと思います。
何度も読み返して貰える本になるといいなあと、淡い期待を抱いています。

注目するポイント

さて、本書には注目する所がいろいろあります。
まず、監修が竹内先生です(!!)。
本日行われた竹内先生の最終講義では本書のことを取り上げていただいたようです。感激…。
「まえがき」も竹内先生に書いていただきましたのでお楽しみに(なんと絵がついてます)!
 
あと、ページ数が472ページ(!!)もあります。
GCでこんなに書くことあるの? と思うかもしれませんけど、本当はあと100ページくらい増える予定でした(!!)。
 
また、本の帯をRuby作者のまつもとさんに書いていただきました。とっても良い言葉です。
 
ついでに、各章の扉絵を私が書きました。
ちょっと恥ずかしいのですが、下にそのウチの二つを掲載しておきます。

「序章」

PythonGC

略称

んー、なにがいいんでしょうね。別に「GC本」とか呼んで貰っていいです(グローバル!!)。
あ、一応、「Garbage Collection」「Algorithms」「Implementions」から「GCAI(GC愛)」というのを思いつきました。
gcaiは結構カッコイイかも。でも、定着したものを使えばいいかなあと思って、NoPlanです。

GC本(gcbook)」がいいかなー。

目次

    監修者まえがき
    はじめに
    謝辞
  序章
    GCとは
    GCの恩恵
    GCの歴史
    なぜ今GCなのか
    読者対象
    本書の表記

  アルゴリズム編
  第1章 GCを学ぶ前に
    1.1 オブジェクト/ヘッダ/フィールド
    1.2 ポインタ
    1.3 ミューテータ
    1.4 ヒープ領域
    1.5 生きている/死んでいるオブジェクト
    1.6 アロケーション
    1.7 チャンク
    1.8 ルート
    1.9 評価項目
  第2章 マークスイープGC(Mark Sweep GC)
    2.1 マークスイープGCとは
    2.2 メリット
    2.3 デメリット
    2.4 複数フリーリスト(Multiple free-list)
    2.5 BiBOP法(Big Bag Of Pages)
    2.6 ビットマップマーキング(Bitmap Marking)
    2.7 遅延スイープ法(Lazy Sweep)
  第3章 参照カウント(Reference Counting)
    3.1 参照カウントのアルゴリズム
    3.2 メリット
    3.3 デメリット
    3.4 遅延参照カウント法(Deferred Reference Counting)
    3.5 Sticky参照カウント法
    3.6 1ビット参照カウント(1bit Reference Counting)
    3.7 部分マークスイープ法(Partial Mark & Sweep)
  第4章 コピーGC(Copying GC)
    4.1 コピーGCとは
    4.2 メリット
    4.3 デメリット
    4.4 CheneyのコピーGC
    4.5 近似的深さ優先探索法
    4.6 複数空間コピー法
  第5章 マークコンパクトGC(Mark Compact GC)
    5.1 マークコンパクトGCとは
    5.2 メリット
    5.3 デメリット
    5.4 Two-Fingerアルゴリズム
    5.5 テーブルアルゴリズム
    5.6 ImmixGC
  第6章 保守的GC(Conservative GC)
    6.1 保守的GCとは
    6.2 メリット
    6.3 デメリット
    6.4 正確なGC(Exact GC)
    6.5 間接参照
    6.6 MostlyCopyingGC
    6.7 ブラックリスト
  第7章 世代別GC(Generational GC)
    7.1 世代別GCとは
    7.2 Ungarの世代別GC
    7.3 メリット
    7.4 デメリット
    7.5 世代間の参照を記録する方法
    7.6 複数世代管理GC(Multi-generational GC)
    7.7 トレインGC(Train GC)
  第8章 インクリメンタルGC(Incremental GC)
    8.1 インクリメンタルGCとは
    8.2 メリット・デメリット
    8.3 Steele のアルゴリズム
    8.4 湯淺のアルゴリズム
    8.5 各ライトバリアの比較

  実装編
  第9章 PythonGC
    9.1 はじめに
    9.2 オブジェクト管理
    9.3 Python のメモリアロケータ
    9.4 第0層汎用的な基礎アロケータ
    9.5 第1層Python低レベルメモリアロケータ
    9.6 第2層Pythonオブジェクトアロケータ
    9.7 第3層オブジェクト特有アロケータ
    9.8 参照カウント
    9.9 参照の所有権
    9.10 循環参照をもつゴミオブジェクトへの対応
    9.11 パフォーマンスチューニングのヒント
  第10章 DalvikVMのGC
    10.1 はじめに
    10.2 mmap再入門
    10.3 DalvikVMのソースコード
    10.4 DalvikVMのGCアルゴリズム
    10.5 オブジェクト管理
    10.6 マークフェーズ
    10.7 スイープフェーズ
    10.8 Q&A
  第11章 RubiniusのGC
    11.1 はじめに
    11.2 RubiniusのGCアルゴリズム
    11.3 オブジェクト管理
    11.4 正確なGCへの道
    11.5 コピーGC
    11.6 Q&A
  第12章 V8のGC
    12.1 はじめに
    12.2 V8のGCアルゴリズム
    12.3 オブジェクト管理
    12.4 正確なGCへの道(V8 編)
    12.5 マークコンパクトGC
    12.6 マークフェーズ
    12.7 コンパクションフェーズ
    12.8 Q&A

  補遺
    補遺A 簡単言語入門: Python編
    補遺B 簡単言語入門: Java編
    補遺C 簡単言語入門: Ruby編
    補遺D 簡単言語入門: JavaScript編
    補遺E 参考文献
    本書のレビューを終えて
    あとがき
    索引


当初予定していたHotspotVMの解説は時間の都合により断念しました。
あと、途中まで書いて断念した箇所が結構あるのでこれはどこかで公開したいですね(G1GCとか)。
 

蛇足:感想

梅酒を飲みながら、つぶやくようにブログの記事を書いたのが、本書を書くきっかけです。
GC本という、いかにも需要の見込めない提案に食いついてくれた編集者の方、出版社様に感謝感謝です。
 
あと、親バカなんですけど、この本面白いです(校正していて思いました)。
ま、こんな本が欲しいなー、というのを形にしたので当然なのですが。
GC本を必要とする人に、届けばいいなと思います。
 
また、この本は決して一人では書けませんでした。相川さんと一緒に書き上げた本です。
竹内先生、レビューワの皆様、編集部の皆様には感謝してもしきれません。ありがとうございます。
NaClの皆様、ついったーで励ましてくれた皆様にも感謝です。
(なんか謝辞っぽくなってしまった)
 
あと、やっぱり一年というのは長かったですね。「本を書くのは難しい!!」ということがよくわかりました。
「もうやだー」と終盤の方は思いましたけど、今は不思議と次回作が書きたいです。
次回作の構想(だけ)はありますので、また、何かユニークなものを書ければいいと思います。
 
では。