ガベージコレクションのアルゴリズムと実装読書会
ガベージコレクションのアルゴリズムと実装読書会に参加してきました。
http://github.com/ujihisa/nari.gc/blob/master/README.md
「ガベージコレクションのアルゴリズムと実装」をみんなで読んで、疑問に思ったところを筆者も交えて議論するというマニアックな勉強会。
私もガベージコレクション(GC)の実装にはほとんど興味が無かったのですが、とにかくこの本がすごい。GCの解説に留まってなくて、「実装」にかなりの割合を割いています。Python,DalvikVM(Android),Rubinius,V8といった、実際の言語処理系のコードをじっくり追いかけるというアプローチをとっている。たとえ、GCにあまり興味が無くても、GCという一つの根幹部分の実装を切り口にして、処理系の設計ポリシーやメモリ管理で知っておきたいことを読み取れる。例えば、言語処理系に限らず、この本を始点にlibcのmalloc()、カーネルのmm(バディシステムとかスラブアロケータとか)と読み進めば、Linuxのメモリ管理なんかもかなり見えてくるんじゃないかと。
実際、今回の勉強会には、ガベージコレクションを実装する人なんてほとんどいないはずなのに、40人以上の参加者が集まってました。
まる一日、じっくり技術書を読んで、筆者を含む参加者のみなさんと語り合う機会というのはすごく贅沢で充実した場でした。
ほんと刺激になりました。もっといろんな処理系を勉強したいなと思いました。
質疑
今回の読書会では書籍の11章「RubiniusのGC」をみんなで読んで、筆者のid:authorNariとディスカッションしました。
僕が読んでて気になったところにも回答いただきましたが、これをきっかけにもうちょっと調べてみたいです。
- 【Q1】
- オブジェクトアロケータがメモリ管理領域を決めるのに使ってる閾値(large_object_threshold)として、2700byteという固定値を選んだ理由はわかりますか?何かよく使われるオブジェクトの上限値(よりちょっと大きめ)とかが基準になってるのでしょうか?
- 【A1】
- 詳しくは知らないが、経験則で決めた数値ではないでしょうか。
- 【補足1】
- こういう即値は経験則である可能性が高いですね。
- ソースのコメントとか、ちょっと検索したがわからなかった。
- 誰か理由とか知ってたら教えてください。
- 【Q2】
- 【A2】
- 共著者とも議論した内容。結論は忘れたが、気になる内容。
以下、読書会の途中で紹介されたプレゼンのメモを残しておきます。
こちらも面白いお話がきけました。
詳しくは公開されている資料などをご覧ください。