forked from authorNari/g1gc-impl-book
-
Notifications
You must be signed in to change notification settings - Fork 0
/
preface.re
89 lines (54 loc) · 4.86 KB
/
preface.re
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
= はじめに
== まえがき
本書は『徹底解剖「G1GC」 アルゴリズム編』(以降、単に『アルゴリズム編』と略す)@<bib>{g1gcbook}の後編として、アルゴリズムの説明だけでは見えてこない実装の部分に焦点を当てた書いた本です。
各章の紹介をまじえつつ、本書の概要を見ていきましょう。
* @<chap>{abstract} @<title>{abstract}
現在、HotspotVMはG1GCを含めて5つものGCを実装しています。
ただ、それぞれのGCはすべてゼロから書かれたわけではありません。
HotspotVMにはGCを作るための枠組みがしっかりと設計されており、その枠組みを利用してGCが実装されています。
@<chap>{abstract}で述べるオブジェクト管理機能がその枠組みのひとつです。
オブジェクト管理機能のインターフェイスによって、複数のGCアルゴリズムが切り替え可能になっており、また、新しいGCを組み込むことを簡単にしています。
* @<chap>{heap}〜@<chap>{object} アロケータとヒープ周り
@<chap>{heap}〜@<chap>{object}ではオブジェクトのデータ構造と、メモリアロケータの部分を述べています。
アロケータの方はOSと絡むような少し泥臭いところまで説明しています。
* @<chap>{vm_thread}〜@<chap>{gc_thread_con} スレッド管理
@<chap>{vm_thread}〜@<chap>{gc_thread_con}では基本的にG1GCで利用するスレッドの管理方法について述べています。
スレッドに関してもGCで簡単に扱える枠組みがHotspotVM内部に作成されており、GCはそれを利用して並列GCや並行GCを実装しています。
* @<chap>{mark}〜@<chap>{scheduling} G1GCの実装部
@<chap>{mark}〜@<chap>{scheduling}ではG1GCの並行マーキングと退避、そしてスケジューラの実装について述べています。
この部分は『アルゴリズム編』で特に詳細に説明した部分でもありますので、説明済みの箇所はなるべく省略し、代わりに『アルゴリズム編』では述べられなかった箇所を取り上げています。
* @<chap>{precise}〜@<chap>{wbarrier} そのほかの工夫
@<chap>{precise}〜@<chap>{wbarrier}は著者の常々疑問に思っていた点を調査したものです。
「HotspotVMってどうやって正確なGCを実装してるんだろう」という疑問と「そんなにたくさんGC実装してライトバリア遅くなんないの?」という疑問があったため、実装を調べて結果を書き起こしました。
最後になりましたが、いつ出すとも書いてなかったにも関わらず、私を信じて本書をサポートしてくださったスポンサーの皆様に感謝します。
本当にありがとうございます。
== 注意事項
G1GCのアルゴリズムの一部は米国で特許が取得されています@<fn>{g1gc_patent}。
G1GCを実装して公開する場合は注意してください。
//footnote[g1gc_patent][米国特許番号は7340494]
== 対象読者
OpenJDK 7のメモリ管理周りの実装に興味がある方、『アルゴリズム編』をすでに読んだ方を対象にしています。
本書では『アルゴリズム編』の内容を参照しますので、まだお持ちでない方は以下からお買い求めいただくことをお勧めします。
* @<href>{http://tatsu-zine.com/books/g1gc, 『徹底解剖「G1GC」 アルゴリズム編』}
また、GCの基本的な部分を知りたい場合は拙著である『ガベージコレクションのアルゴリズムと実装』@<bib>{gcbook}をオススメします。
== 図中の矢印
本書内の図にはさまざまな矢印が出てきます。本書で使う主要な矢印を@<img>{yazirushi}にまとめました。
//image[yazirushi][矢印のパターン]
矢印(a)は参照関係を表します。ルート@<fn>{root}からオブジェクトへの参照などに使われます。
矢印(b)は代入操作、移動操作に表します。変数への代入・オブジェクトコピー・移動などに使われます。
矢印(c)は時間の経過を表します。
//footnote[root][ルート:オブジェクトのポインタをたどる際の「起点」となる部分。]
== ソースコードの表記方法
本書ではOpenJDKのソースコードを一部読みやすいように省略・修正して記述しています。
具体的な省略箇所は次のとおりです。
* デバッグ用のコード
* 例外処理のコード
また、修正箇所は次のとおりです。
* インデントの修正
* 行の折り返し
* 英語のコメントを翻訳
* 説明のためのコメント追記
* 説明のためのマクロ展開
上記、省略・修正箇所については行番号を明記していません。