世界を動かす技術を、日本語で。

ガーベジコレクションハンドブック: 自動メモリ管理の技術(第2版)(2023年)

2026年6月26日原文(gchandbook.org)

概要

  • Garbage Collection Handbook 第2版は、最新の自動メモリ管理技術を網羅
  • ハードウェア・ソフトウェアの進化による新たな課題と対応策を解説
  • 並列・リアルタイムGCなど最先端アルゴリズムを詳細に紹介
  • 実装・設計者向けに図解や擬似コードも豊富
  • オンラインデータベースや電子書籍特典も充実

Garbage Collection Handbook 第2版の概要

  • 1996年刊行の Richard Jones著「Garbage Collection」 は自動メモリ管理分野の画期的書籍
  • 後継書「 The Garbage Collection Handbook: The Art of Automatic Memory Management」は2012年に分野の現状を集約
  • 技術進歩により メモリ管理 の重要性と難易度が増大
  • 第2版では 過去60年間 の知見を集約し、最新の研究成果・実装事例を包括
  • 主要な手法・最先端技術を 一つの枠組み で比較・解説

主要内容と特徴

  • 近年の ハードウェア・ソフトウェア進化 によるGCへの新たな課題
  • 高性能GC設計・実装者向けに 影響・対応策 を考察
  • シンプルかつ伝統的なアルゴリズムから、 並列・インクリメンタル・リアルタイムGC まで網羅
  • アルゴリズムや概念は 擬似コード・図解 でわかりやすく説明
  • ほぼ全ての 現代プログラミング言語 がGCを採用
  • プログラマ必須の知識として、各種GCの仕組みや課題を 専門的視点 で解説
  • 多様なGC選択・設定に自信を持てる知識の提供

書籍の特徴と付録

  • 1996年版・2012年版の 完全かつ最新・権威ある続編
  • 並列・同時・リアルタイムGCアルゴリズム を徹底解説
  • 最新の 高性能商用GC の詳細な解説
  • ランタイムシステムとの インターフェース など難解なテーマも説明
  • 90ページ超の増補、永続性・省エネGCなど新章を追加
  • 約3,400件のGC関連論文を収録した オンラインデータベース と連携

電子書籍・翻訳・Webリソース

  • 電子書籍版では 37,000件超のハイパーリンク で各章・用語・論文等に即アクセス可能
  • 2016年に 中国語・日本語訳 の第1版も出版
  • オンラインの 書誌データベース は3,400件超のGC関連論文を収録
    • 一部は 要約・URL・DOI 付きで随時更新
    • オンライン検索・BibTeX/PS/PDF 形式でのダウンロードも可能

Hackerたちの意見

前に読んだのを覚えてる。引っ越しの時、息子が大事なことを知らずに捨てちゃったんだ。おすすめだよ。

こんな本が早々にゴミにされるなんて皮肉だね。

Q: この現実の例はどんなコレクションを示してるの? A: コピーガベージコレクタ(セミスペース)。第4章!素晴らしい本だよ。ベイカーのトレッドミルにはいつも魅了されてた。フィボナッチサイズのミルで実装できる現実のケースが欲しかったんだ。

AIは手動メモリ管理のコーディングがどれくらい得意なのかな?自動メモリ管理に大きな変化があるの?

CodexやClaudeが手動メモリ管理を間違えたのを見たことがない。自分のメモリ管理の問題をキャッチするためにリークサニタイザーや他のツールを使うのにかなりこだわってたけど、今はLLMに頼るようになって、その手のテストは心配のリストの下の方に落ちてきた。以前は面倒だったりエラーが起きやすかったタスクが、もうそうじゃなくなったことに驚いてる。C++のような中間安全な言語から、Rustのようなもっと安全な言語だけじゃなくて、意外にもCやプラットフォーム特有のアセンブリのような、あまり安全でない言語にシフトするのを期待してるよ。

僕の意見では、1964年末にIBMのPL/Iプログラミング言語によって導入された「手動」のメモリ管理は、Cや他の言語に受け継がれたもので、プログラマーが「free」を呼び出す責任を持つっていうのは、深刻な間違いだったと思う。導入された時点で既に時代遅れの技術だったんだ。明示的な「free」が発明されたときには、自動メモリ再利用の方法が1960年から4年間知られていて、別のIBMの社員が参照カウントを発明したんだ(LISP Iのガーベジコレクターに反応して)。単純に実装すると参照カウントにはいくつかの欠点があるけど、最適化された実装ではそれを比較的簡単に回避できる。親の記事で話題にされている本にも、参照カウントについての章があるよ。僕は何十年もCプログラムを書いてきたけど、直接「free」を呼び出したことは一度もない。常に参照カウントを使ってきたからね。直接「free」を呼び出したいと思ったこともない。Cは、コンパイラが仮想関数の呼び出しや参照カウントの処理などを暗黙的に行わないという欠点があるけど、高レベル言語が提供するような技術は、Cのような言語でも使えるよ、たとえそれがもっとボイラープレートコードを必要としたとしてもね。「shared_ptr」の参照カウントの実装は好きじゃないな。あのデータ型は、普通の参照やポインタが期待される場所では直接使えないから。そういう問題がない実装も存在するよ。

GCの強みは、書くのが簡単なだけじゃなくて、読むのも楽だってことだよ。どこでもアロケーションとビジネスロジックを交互に書く必要がないからね(型や命令型コードを通して)。GCは、実際のコードで擬似コードの明瞭さに近づく唯一の方法なんだ。これがこのテーマについての僕の後の気づきの一つだよ。 (https://world-playground-deceit.net/blog/2024/11/how-i-learn...)

Zigは結構いいけど、まだ完璧じゃないね。

この本シリーズで気に入らなかったのは、トレーシングGCと参照カウントの両方を「ガベージコレクション」という傘の下にまとめたことだね。プログラミングコミュニティがそれに同意するか確認せずに。結果的に、同意しなかったみたい。ここやredditでこの本だけのせいで用語について議論してるスレッドをたくさん見たよ。その定義だと、C++のコードはstd::shared_ptrを使ってればガベージコレクションがあることになるけど、「ガベージコレクトされたプログラミング言語」という用語の一般的な使い方には反してる。手動の言語、例えばC++やRustと対比されるからね。「自動メモリ管理」というのがプログラマーがメモリを管理するためにやることをもっと適切に表してると思う。今はタイトルに入ってるけど、まだ主要な用語にはなってないね。

Linuxカーネルにはガベージコレクションがあるよ。しかも、物議を醸す参照カウント型だけじゃない。

このシリーズの本で気に入らなかったのは、「ガーベジコレクション」という言葉をトレーシングGCと参照カウントの両方の傘用語として選んだことだね。プログラミングコミュニティがそれに同意するか確認せずにやっちゃったみたいで、結果的に同意してなかった。これはメモリ管理の研究で何十年も使われてきた標準的な用語なんだ。嫌がってるプログラマーは、メモリ管理の原則を理解してない人たちだけだよ。 > その定義だと、C++のコードはstd::shared_ptrを使ってればガーベジコレクションをしてるってことだね。そうだね。 > 「ガーベジコレクションされたプログラミング言語」という用語の一般的な使われ方に反してるのは、C++やRustのような手動の言語とガーベジコレクションされた言語を対比させるためなんだ。この対比は、メモリ管理を理解してない人たちの頭の中にしか存在しないから、この誤解に反するのはいいことだよ。でも、「ガーベジコレクション」が面白くないってわけじゃないし、興味深いトレードオフもあるよね。君が言ったように、C++とRustはGCを使ってるし、実際にCPythonで使われてるGCに似たものを使ってるんだ。

「ガーベジコレクション」の代わりに「動的ライフタイム決定」って言えるよ。コードが実行時に「このメモリを解放しても安全か?」って質問に答えるために動いてるなら、それが動的ライフタイム決定で、参照カウントとより洗練されたGCスキームの両方に共通する特性なんだ。

Hacker Newsで議論の続きを見る