JJUG CCC 2018 Springで「ざっくりわかった気になるモダンGC入門」というお話をしてきました
JJUG CCC 2018 Springにて、「ざっくりわかった気になるモダンGC入門」というお話をしてきました。
発表資料や喋った内容は次のリンクを参考にしていただければと思います
ここでは、この発表を作るまでの振り返りなどを簡単に書きたいと思います
発表の着想
今年の2月くらいにTwtterでEpsilonGCというGCがあるらしいと流れてきて調べたところ、拍子ぬけしたのがそもそもきっかけだった記憶があります。
ZGCとShenadoah GCも見つけて、EpsilonGCをオチに使う小噺をしたら面白そうというのがそもそも着想でした。
CFPに応募した理由
新しいGCアルゴリズムを勉強したかったのが第一にはあります。ですが、サボり癖を発症してしまう自分がいたので強制力を持たせるようにCFPに応募しました。非常に私的な理由です。
運用で使っていたり、R&Dの業務ということは全くありません。ゴールデンウィークなどの余暇を利用した自由研究です。
登壇までにやったこと
- 4月の後半 くらいから本格的にShenandoah GCのホワイトペーパーを読み始める
- ゴールデンウィークでZGCのアルゴリズムを勉強
- 発表の一週間前くらいに資料が9割完成。社内で発表練習兼勉強会を開く
- 当日に社内で一人でリハーサル
- 遅刻にひやひやしながらもなんとかベルサール新宿に到着。11:20に登壇開始
- 登壇終了
GCのアルゴリズムの勉強の進捗が思わしくなく、プレッシャーのかかるゴールデンウィークにw
ZGCのカラーポインタと仮想メモリの部分の理解ができなくて焦っていました。
そんなときに Linuxの仕組み で仮想メモリの章を読んでやっと理解できました。
私の知っている限りOSに関する本は難解なものや入門書が多い中で、このLinuxの仕組みは初心者から中級者あたりが理解したいことが掲載されていて、大変素晴らしいです。
サイボウズの技術顧問をやっていただいている方が著者なのでステマ感がありますが、いい本です。
僕が知っているOSに関して初心者が読みやすい本は大規模サービス技術入門 ―データ構造、メモリ、OS、DB、サーバ/インフラ なんですが、これも素晴らしい本です。
発表のレベル感
発表のレベル感的には、説明はざっくりだけどGCのアルゴリズムの肝をメインに説明することで動作イメージが共有できるくらいを目標にしていました。
GC絡みでトラブルになったときに頭の中に思い浮かべるメンタルモデルとして想像できるようになる感じです。
read barrierとかwrite barrierといった細かい話もあるのですが、思い切ってカットしています。 理解が難しい上に、アルゴリズムをざっくり理解するには詳細すぎる情報だったからです。
できるだけ簡単に多くの人に聞いていただきたかったので、「GCの知識がほんの少し必要です」ということでTwtterで宣伝してました。ですが、G1 GC/GMS GCを理解していないと、20分で理解するのは難しかったと思います。
発表の感想
VGAのコネクタをボランティアスタッフの方に貸していただけたのは大変助かりました。ありがとうございました。
発表自体は時間をオーバーすることもなく発表できました。EpsilonGCで最後に落として少し笑ってもらえたので満足しています。
150名程度の部屋でしたが、だいたい埋まっていたので興味がある人には情報を届けられたのではないかと思います。 ネットやアンケートの情報を見る限り、満足いただけた方も多かったのではないかと思います。
次発表するぞとおもっている人へ
カンファレンスはすごい事例ばかり出てくるので物怖じするかもしれません。Java関連で自分が面白いと思っている技術があったら、ぜひ応募してみましょう。登壇準備は大変ですが、技術を理解するには効果的です。
失敗談を発表しても登壇者にとって振り返りになりますし、同じようなことで悩んでいる人の参考になります。
あまりにアレだったら、CFPで落選すると思いますし、あまり心配しすぎずに応募してみましょう。
私みたいに、自由研究の発表でも大丈夫です。コミュニティが盛り上がっているというのはすごい大事です。
なので、自分のおかげでコミュニティが盛り上がるんだくらいの大船に乗った気持ちで、発表しましょう。
ネット上で見つけた質問とか
128TBのメモリの意味がわかりません
ざっくりわかった気になるモダンGC入門 https://t.co/sK1hgnC0YD 「ZGCでは64bitのアドレスを使う.メモリが128TB必要」の意味がわからんかった。ZGC wikiには理論上限4TBと書いてあるけど。
— Yasushi Abe (@yasushia) 2018年5月30日
ZGCの場合、0bitから42bitを使ってヒープ上のメモリの場所を表現しています。このため、4TB分のヒープが理論上の最大値になります。
ZGCの場合、43bit-64bitもカラーポインタを表現するのに使ったり、オブジェクトの情報を保存する領域として予約されているようです。そのため、64bitアドレスをすべて使うことになります。64bitすべてのアドレスをすべて使うと64bitで表現できるメモリ容量は128TBということになります。(64bitすべてを使うと16EBで、これは私の理解が間違っていました。)
もう1つ。64bitすべてだと16EBですよね。ZGC は上位16 + 1bitが0固定なので128TB、と理解しました。
— Yasushi Abe (@yasushia) May 31, 2018
書きわすれてましたが、この記事でZGCの概要を把握できて元の情報を読むのも楽になってとても助かりました。ありがとうございます。
Shenandoah GC、ZGCとG1GCと何が違うの?
コンパクションGCのときにアプリケーションスレッドを動作させながら行うところが一番違います。 G1GCの場合、young GCとmixed GCのときにコンパクションGCを行うためアプリケーションスレッドが停止します。
G1GCは、目標停止時間を設定してそれを元にGCスレッドを動作させますがSheandoah GC/ZGCはマーキングフェーズの開始と 最後の確定時くらいです。コンパクションGCにともなうアプリケーションスレッドの停止はありません。
最後に
JJUGの会場ボランティアスタッフのみなさま、スポンサー企業様のおかげで、非常に円滑にJJUG CCC 2018 Springが行えたと思います。ありがとうございました!
会場も広く、セッション盛りだくさんで、楽しいカンファレンスになりました。
さて、秋は何をしゃべるかねぇ