Hatena::ブログ(Diary)

I am Cruby! RSSフィード Twitter

2010-03-03

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


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

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

Amazonさんで買う

ガベージコレクションのアルゴリズムと実装

ガベージコレクションのアルゴリズムと実装

 

読み所

本書は次の2つのテーマを扱います。
1.GCアルゴリズムアルゴリズム編) 2.GCの実装(実装編)
アルゴリズム編では、これまでに考案されてきた数多くのGCアルゴリズムの中 から、重要なものを厳選して紹介します。伝統的かつ基本的なものから、やや 高度なアルゴリズムを選定しています。GC独特の考え方や各アルゴリズムの特 性などを理解していただくのがアルゴリズム編の最大の目的です。
実装編では、筆者らが選定した言語処理系GCを読み進めていきます。 アルゴリズム編では理論をしっかり学び、実装編で理論がどのように使われて いるのか、実際に見てみようというわけです。
ーーまえがきより抜粋

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

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

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

注目するポイント


さて、本書には注目する所がいろいろあります。
まず、監修が竹内先生です(!!)。
本日行われた竹内先生の最終講義では本書のことを取り上げていただいたようです。感激…。
「まえがき」も竹内先生に書いていただきましたのでお楽しみに(なんと絵がついてます)!
 
あと、ページ数が472ページ(!!)もあります。
GCでこんなに書くことあるの? と思うかもしれませんけど、本当はあと100ページくらい増える予定でした(!!)。
 
また、本の帯をRuby作者のまつもとさんに書いていただきました。とっても良い言葉です。
 
ついでに、各章の扉絵を私が書きました。
ちょっと恥ずかしいのですが、下にそのウチの二つを掲載しておきます。
f:id:authorNari:20100303191957p:image
「序章」
f:id:authorNari:20100303191958p:image
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章 V8GC 12.1 はじめに 12.2 V8GCアルゴリズム 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の皆様、ついったーで励ましてくれた皆様にも感謝です。
(なんか謝辞っぽくなってしまった)
 
あと、やっぱり一年というのは長かったですね。「本を書くのは難しい!!」ということがよくわかりました。
「もうやだー」と終盤の方は思いましたけど、今は不思議と次回作が書きたいです。
次回作の構想(だけ)はありますので、また、何かユニークなものを書ければいいと思います。
 
では。

たろうたろう 2010/03/03 21:42 ウェブでは、全文公開してPRなどに役立っているなどの話を頻繁にききます。ぜひ、全文公開していただけないでしょうか。

authorNariauthorNari 2010/03/03 21:46 >たろうさん
ですよねぇ。この件については、私の一存では決められません。
RHGのように将来的にはWeb公開したいと、個人的には思っています。
(というあやふやな回答しかできず申し訳ないです)

murase_syukamurase_syuka 2010/03/04 00:30 > RHGのように将来的にはWeb公開したいと、個人的には思っています。
 そんな、初版で絶版の話しなくてもw
回収が早すぎますよ><

authorNariauthorNari 2010/03/04 00:39 > 回収が早すぎますよ><
ちょっと早いですね。GCとしては失格ですww

marumaru 2010/03/04 09:44 ものすごくおもしろそうな本ですね!!

是非読ませていただきたいと思います。
書いてくれてありがとうございます。

authorNariauthorNari 2010/03/04 11:47 > maruさん
そういっていただけるのが一番嬉しいです。
ありがとうございますm(_ _)m

あいかわあいかわ 2010/03/04 13:20 サインしてくださいね!!!

authorNariauthorNari 2010/03/04 13:24 > あいかわ
僕のにもサインしてください!

kakkun61kakkun61 2010/03/04 15:55 面白そうです。気合入れて読むぞ。

authorNariauthorNari 2010/03/04 16:07 > kakkun61さん
ありがとうございます!

suzumura_sssuzumura_ss 2010/03/04 17:07 RubyKaigi2009で話されていた本ですよね!
…Amazon.co.jpで予約できないのは何故だろう(´・ω・`)

authorNariauthorNari 2010/03/04 17:13 > suzumura_ssさん
ですです。
あ、Amazonにはまだ載ってないです。発売日前には載って欲しいですね(ここは私がどうこう言える部分じゃないのです)

masterqmasterq 2010/03/04 17:52 是非読みたいです!

authorNariauthorNari 2010/03/04 19:53 > masterqさん
はい、読んでください!m(_ _)m

ichhiichhi 2010/03/05 20:23 おもしろそうですね。PythonのGC関連をぜひ読みたいので、買います。

authorNariauthorNari 2010/03/06 16:25 > ichhiさん
ありがとうございます!!

pekoshipekoshi 2010/03/10 15:25 ただいまRuby勉強中のC++上がりです。
GCの本がDELLなんてすばらしいです。
Yuguiさん本(初めてのRuby)を読み終えたら、
頭の運動として読みたいと思います。
また、島根県はうらやましいです。
富山県でもRubyを活発化させたいです。

authorNariauthorNari 2010/03/11 09:48 > pekoshiさん
はい、読んでえると嬉しいです。
富山県のRuby普及。頑張ってください。

インドリインドリ 2010/03/13 11:29 素晴らしい本を執筆して頂き有難うございます。
GCは非常に知りたかった事なので感激しております。
今時のコンパイラを作るには、やはりGCの知識が必要ですね♪

authorNariauthorNari 2010/03/13 11:51 > インドリさん
おおお、そう言っていただけるとありがたいです!
コンパイラはどうかわかりませんが、言語処理系実装者には必須の知識となりつつありますね。

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証