rubyによる本気の gc - rabbit slide show · rubyによる本気のgc - serious gc with ruby...
TRANSCRIPT
![Page 1: Rubyによる本気の GC - Rabbit Slide Show · Rubyによる本気のGC - Serious GC with Ruby Powered by Rabbit 2.0.5 Rubyによる本気の GC Serious GC with Ruby @nari3 #sprk2012](https://reader037.vdocuments.net/reader037/viewer/2022090606/605c6d78243d56545952badb/html5/thumbnails/1.jpg)
Rubyによる本気のGC - Serious GC with Ruby Powered by Rabbit 2.0.5
Rubyによる本気のGC
Serious GC with Ruby
@nari3#sprk20122012/9/15
ネットワーク応用通信研究所
![Page 2: Rubyによる本気の GC - Rabbit Slide Show · Rubyによる本気のGC - Serious GC with Ruby Powered by Rabbit 2.0.5 Rubyによる本気の GC Serious GC with Ruby @nari3 #sprk2012](https://reader037.vdocuments.net/reader037/viewer/2022090606/605c6d78243d56545952badb/html5/thumbnails/2.jpg)
Rubyによる本気のGC - Serious GC with Ruby Powered by Rabbit 2.0.5
提供
![Page 3: Rubyによる本気の GC - Rabbit Slide Show · Rubyによる本気のGC - Serious GC with Ruby Powered by Rabbit 2.0.5 Rubyによる本気の GC Serious GC with Ruby @nari3 #sprk2012](https://reader037.vdocuments.net/reader037/viewer/2022090606/605c6d78243d56545952badb/html5/thumbnails/3.jpg)
Rubyによる本気のGC - Serious GC with Ruby Powered by Rabbit 2.0.5
うなぎの件
<URL:https://www.wantedly.com/projects/478>
![Page 4: Rubyによる本気の GC - Rabbit Slide Show · Rubyによる本気のGC - Serious GC with Ruby Powered by Rabbit 2.0.5 Rubyによる本気の GC Serious GC with Ruby @nari3 #sprk2012](https://reader037.vdocuments.net/reader037/viewer/2022090606/605c6d78243d56545952badb/html5/thumbnails/4.jpg)
Rubyによる本気のGC - Serious GC with Ruby Powered by Rabbit 2.0.5
自己紹介
中村成洋/@nari3/nari/authorNari✓
CRubyのコミッタ✓
GCメンテナ&デストロイヤ✓
![Page 5: Rubyによる本気の GC - Rabbit Slide Show · Rubyによる本気のGC - Serious GC with Ruby Powered by Rabbit 2.0.5 Rubyによる本気の GC Serious GC with Ruby @nari3 #sprk2012](https://reader037.vdocuments.net/reader037/viewer/2022090606/605c6d78243d56545952badb/html5/thumbnails/5.jpg)
GCとは(ry
![Page 6: Rubyによる本気の GC - Rabbit Slide Show · Rubyによる本気のGC - Serious GC with Ruby Powered by Rabbit 2.0.5 Rubyによる本気の GC Serious GC with Ruby @nari3 #sprk2012](https://reader037.vdocuments.net/reader037/viewer/2022090606/605c6d78243d56545952badb/html5/thumbnails/6.jpg)
GoogleTrendでみるGC
![Page 7: Rubyによる本気の GC - Rabbit Slide Show · Rubyによる本気のGC - Serious GC with Ruby Powered by Rabbit 2.0.5 Rubyによる本気の GC Serious GC with Ruby @nari3 #sprk2012](https://reader037.vdocuments.net/reader037/viewer/2022090606/605c6d78243d56545952badb/html5/thumbnails/7.jpg)
![Page 8: Rubyによる本気の GC - Rabbit Slide Show · Rubyによる本気のGC - Serious GC with Ruby Powered by Rabbit 2.0.5 Rubyによる本気の GC Serious GC with Ruby @nari3 #sprk2012](https://reader037.vdocuments.net/reader037/viewer/2022090606/605c6d78243d56545952badb/html5/thumbnails/8.jpg)
![Page 9: Rubyによる本気の GC - Rabbit Slide Show · Rubyによる本気のGC - Serious GC with Ruby Powered by Rabbit 2.0.5 Rubyによる本気の GC Serious GC with Ruby @nari3 #sprk2012](https://reader037.vdocuments.net/reader037/viewer/2022090606/605c6d78243d56545952badb/html5/thumbnails/9.jpg)
![Page 10: Rubyによる本気の GC - Rabbit Slide Show · Rubyによる本気のGC - Serious GC with Ruby Powered by Rabbit 2.0.5 Rubyによる本気の GC Serious GC with Ruby @nari3 #sprk2012](https://reader037.vdocuments.net/reader037/viewer/2022090606/605c6d78243d56545952badb/html5/thumbnails/10.jpg)
![Page 11: Rubyによる本気の GC - Rabbit Slide Show · Rubyによる本気のGC - Serious GC with Ruby Powered by Rabbit 2.0.5 Rubyによる本気の GC Serious GC with Ruby @nari3 #sprk2012](https://reader037.vdocuments.net/reader037/viewer/2022090606/605c6d78243d56545952badb/html5/thumbnails/11.jpg)
休日の検索数がさがっている
![Page 12: Rubyによる本気の GC - Rabbit Slide Show · Rubyによる本気のGC - Serious GC with Ruby Powered by Rabbit 2.0.5 Rubyによる本気の GC Serious GC with Ruby @nari3 #sprk2012](https://reader037.vdocuments.net/reader037/viewer/2022090606/605c6d78243d56545952badb/html5/thumbnails/12.jpg)
Rubyによる本気のGC - Serious GC with Ruby Powered by Rabbit 2.0.5
つまり
平日お仕事でGCを作るリア充✓
もしくはGCバグに悩まされる一般ピープルが多い
✓
✓
休日趣味でGCをいじる人が少ない✓
✓
![Page 13: Rubyによる本気の GC - Rabbit Slide Show · Rubyによる本気のGC - Serious GC with Ruby Powered by Rabbit 2.0.5 Rubyによる本気の GC Serious GC with Ruby @nari3 #sprk2012](https://reader037.vdocuments.net/reader037/viewer/2022090606/605c6d78243d56545952badb/html5/thumbnails/13.jpg)
GCはまだまだ愛されていない
![Page 14: Rubyによる本気の GC - Rabbit Slide Show · Rubyによる本気のGC - Serious GC with Ruby Powered by Rabbit 2.0.5 Rubyによる本気の GC Serious GC with Ruby @nari3 #sprk2012](https://reader037.vdocuments.net/reader037/viewer/2022090606/605c6d78243d56545952badb/html5/thumbnails/14.jpg)
Rubyによる本気のGC - Serious GC with Ruby Powered by Rabbit 2.0.5
ちなみに:年末も異常に検索されている
リアルGCの恐れ..
![Page 15: Rubyによる本気の GC - Rabbit Slide Show · Rubyによる本気のGC - Serious GC with Ruby Powered by Rabbit 2.0.5 Rubyによる本気の GC Serious GC with Ruby @nari3 #sprk2012](https://reader037.vdocuments.net/reader037/viewer/2022090606/605c6d78243d56545952badb/html5/thumbnails/15.jpg)
とにかくGCをもっと
よく知りましょう!
![Page 16: Rubyによる本気の GC - Rabbit Slide Show · Rubyによる本気のGC - Serious GC with Ruby Powered by Rabbit 2.0.5 Rubyによる本気の GC Serious GC with Ruby @nari3 #sprk2012](https://reader037.vdocuments.net/reader037/viewer/2022090606/605c6d78243d56545952badb/html5/thumbnails/16.jpg)
徹底解剖G1GC 実装編正式版公開!!(無料配布)
![Page 17: Rubyによる本気の GC - Rabbit Slide Show · Rubyによる本気のGC - Serious GC with Ruby Powered by Rabbit 2.0.5 Rubyによる本気の GC Serious GC with Ruby @nari3 #sprk2012](https://reader037.vdocuments.net/reader037/viewer/2022090606/605c6d78243d56545952badb/html5/thumbnails/17.jpg)
この場を借りて本書のスポンサーのみなさまありがとうございます
m(_ _)m
![Page 18: Rubyによる本気の GC - Rabbit Slide Show · Rubyによる本気のGC - Serious GC with Ruby Powered by Rabbit 2.0.5 Rubyによる本気の GC Serious GC with Ruby @nari3 #sprk2012](https://reader037.vdocuments.net/reader037/viewer/2022090606/605c6d78243d56545952badb/html5/thumbnails/18.jpg)
Ruby2.0 の GC update
![Page 19: Rubyによる本気の GC - Rabbit Slide Show · Rubyによる本気のGC - Serious GC with Ruby Powered by Rabbit 2.0.5 Rubyによる本気の GC Serious GC with Ruby @nari3 #sprk2012](https://reader037.vdocuments.net/reader037/viewer/2022090606/605c6d78243d56545952badb/html5/thumbnails/19.jpg)
偉い人がいってた
![Page 20: Rubyによる本気の GC - Rabbit Slide Show · Rubyによる本気のGC - Serious GC with Ruby Powered by Rabbit 2.0.5 Rubyによる本気の GC Serious GC with Ruby @nari3 #sprk2012](https://reader037.vdocuments.net/reader037/viewer/2022090606/605c6d78243d56545952badb/html5/thumbnails/20.jpg)
http://www.flickr.com/photos/recompile_net/5952564080http://www.flickr.com/photos/recompile_net/5952564080
「全力で潰す」
![Page 21: Rubyによる本気の GC - Rabbit Slide Show · Rubyによる本気のGC - Serious GC with Ruby Powered by Rabbit 2.0.5 Rubyによる本気の GC Serious GC with Ruby @nari3 #sprk2012](https://reader037.vdocuments.net/reader037/viewer/2022090606/605c6d78243d56545952badb/html5/thumbnails/21.jpg)
Matz mashes something, so we mash something.
![Page 22: Rubyによる本気の GC - Rabbit Slide Show · Rubyによる本気のGC - Serious GC with Ruby Powered by Rabbit 2.0.5 Rubyによる本気の GC Serious GC with Ruby @nari3 #sprk2012](https://reader037.vdocuments.net/reader037/viewer/2022090606/605c6d78243d56545952badb/html5/thumbnails/22.jpg)
僕もなにか潰したい!
![Page 23: Rubyによる本気の GC - Rabbit Slide Show · Rubyによる本気のGC - Serious GC with Ruby Powered by Rabbit 2.0.5 Rubyによる本気の GC Serious GC with Ruby @nari3 #sprk2012](https://reader037.vdocuments.net/reader037/viewer/2022090606/605c6d78243d56545952badb/html5/thumbnails/23.jpg)
Rubyによる本気のGC - Serious GC with Ruby Powered by Rabbit 2.0.5
REE is dead
<URL:http://blog.phusion.nl/2012/02/21/ruby-enterprise-edition-1-8-7-2012-02-released-end-of-life-imminent/>
![Page 24: Rubyによる本気の GC - Rabbit Slide Show · Rubyによる本気のGC - Serious GC with Ruby Powered by Rabbit 2.0.5 Rubyによる本気の GC Serious GC with Ruby @nari3 #sprk2012](https://reader037.vdocuments.net/reader037/viewer/2022090606/605c6d78243d56545952badb/html5/thumbnails/24.jpg)
諸君らが愛したREEは死んだ。なぜだ!
![Page 25: Rubyによる本気の GC - Rabbit Slide Show · Rubyによる本気のGC - Serious GC with Ruby Powered by Rabbit 2.0.5 Rubyによる本気の GC Serious GC with Ruby @nari3 #sprk2012](https://reader037.vdocuments.net/reader037/viewer/2022090606/605c6d78243d56545952badb/html5/thumbnails/25.jpg)
![Page 26: Rubyによる本気の GC - Rabbit Slide Show · Rubyによる本気のGC - Serious GC with Ruby Powered by Rabbit 2.0.5 Rubyによる本気の GC Serious GC with Ruby @nari3 #sprk2012](https://reader037.vdocuments.net/reader037/viewer/2022090606/605c6d78243d56545952badb/html5/thumbnails/26.jpg)
![Page 27: Rubyによる本気の GC - Rabbit Slide Show · Rubyによる本気のGC - Serious GC with Ruby Powered by Rabbit 2.0.5 Rubyによる本気の GC Serious GC with Ruby @nari3 #sprk2012](https://reader037.vdocuments.net/reader037/viewer/2022090606/605c6d78243d56545952badb/html5/thumbnails/27.jpg)
![Page 28: Rubyによる本気の GC - Rabbit Slide Show · Rubyによる本気のGC - Serious GC with Ruby Powered by Rabbit 2.0.5 Rubyによる本気の GC Serious GC with Ruby @nari3 #sprk2012](https://reader037.vdocuments.net/reader037/viewer/2022090606/605c6d78243d56545952badb/html5/thumbnails/28.jpg)
Rubyによる本気のGC - Serious GC with Ruby Powered by Rabbit 2.0.5
BitmapMarking
fork使うようなプログラムで嬉しいはず
✓
Passengerなどで恩恵があるらしい
✓
![Page 29: Rubyによる本気の GC - Rabbit Slide Show · Rubyによる本気のGC - Serious GC with Ruby Powered by Rabbit 2.0.5 Rubyによる本気の GC Serious GC with Ruby @nari3 #sprk2012](https://reader037.vdocuments.net/reader037/viewer/2022090606/605c6d78243d56545952badb/html5/thumbnails/29.jpg)
REEつぶしたった(^o^)
![Page 30: Rubyによる本気の GC - Rabbit Slide Show · Rubyによる本気のGC - Serious GC with Ruby Powered by Rabbit 2.0.5 Rubyによる本気の GC Serious GC with Ruby @nari3 #sprk2012](https://reader037.vdocuments.net/reader037/viewer/2022090606/605c6d78243d56545952badb/html5/thumbnails/30.jpg)
最近の悩み: Kijiは
どうやって潰そうか…
![Page 31: Rubyによる本気の GC - Rabbit Slide Show · Rubyによる本気のGC - Serious GC with Ruby Powered by Rabbit 2.0.5 Rubyによる本気の GC Serious GC with Ruby @nari3 #sprk2012](https://reader037.vdocuments.net/reader037/viewer/2022090606/605c6d78243d56545952badb/html5/thumbnails/31.jpg)
本題
![Page 32: Rubyによる本気の GC - Rabbit Slide Show · Rubyによる本気のGC - Serious GC with Ruby Powered by Rabbit 2.0.5 Rubyによる本気の GC Serious GC with Ruby @nari3 #sprk2012](https://reader037.vdocuments.net/reader037/viewer/2022090606/605c6d78243d56545952badb/html5/thumbnails/32.jpg)
RubyでGCを書くというお話
![Page 33: Rubyによる本気の GC - Rabbit Slide Show · Rubyによる本気のGC - Serious GC with Ruby Powered by Rabbit 2.0.5 Rubyによる本気の GC Serious GC with Ruby @nari3 #sprk2012](https://reader037.vdocuments.net/reader037/viewer/2022090606/605c6d78243d56545952badb/html5/thumbnails/33.jpg)
動機(1)
![Page 34: Rubyによる本気の GC - Rabbit Slide Show · Rubyによる本気のGC - Serious GC with Ruby Powered by Rabbit 2.0.5 Rubyによる本気の GC Serious GC with Ruby @nari3 #sprk2012](https://reader037.vdocuments.net/reader037/viewer/2022090606/605c6d78243d56545952badb/html5/thumbnails/34.jpg)
RubyKaigi Driven Development
![Page 35: Rubyによる本気の GC - Rabbit Slide Show · Rubyによる本気のGC - Serious GC with Ruby Powered by Rabbit 2.0.5 Rubyによる本気の GC Serious GC with Ruby @nari3 #sprk2012](https://reader037.vdocuments.net/reader037/viewer/2022090606/605c6d78243d56545952badb/html5/thumbnails/35.jpg)
Rubyによる本気のGC - Serious GC with Ruby Powered by Rabbit 2.0.5
過去のRubyKaigiの発表...
LazySweepGC - RubyKaigi2008✓
LonglifeGC - 2009✓
LazySweepGC - 2010✓
ParallelMarkingGC - 2011✓
![Page 36: Rubyによる本気の GC - Rabbit Slide Show · Rubyによる本気のGC - Serious GC with Ruby Powered by Rabbit 2.0.5 Rubyによる本気の GC Serious GC with Ruby @nari3 #sprk2012](https://reader037.vdocuments.net/reader037/viewer/2022090606/605c6d78243d56545952badb/html5/thumbnails/36.jpg)
全部Cの話やないか!
![Page 37: Rubyによる本気の GC - Rabbit Slide Show · Rubyによる本気のGC - Serious GC with Ruby Powered by Rabbit 2.0.5 Rubyによる本気の GC Serious GC with Ruby @nari3 #sprk2012](https://reader037.vdocuments.net/reader037/viewer/2022090606/605c6d78243d56545952badb/html5/thumbnails/37.jpg)
Rubyの話、させてください
![Page 38: Rubyによる本気の GC - Rabbit Slide Show · Rubyによる本気のGC - Serious GC with Ruby Powered by Rabbit 2.0.5 Rubyによる本気の GC Serious GC with Ruby @nari3 #sprk2012](https://reader037.vdocuments.net/reader037/viewer/2022090606/605c6d78243d56545952badb/html5/thumbnails/38.jpg)
動機(2)
![Page 39: Rubyによる本気の GC - Rabbit Slide Show · Rubyによる本気のGC - Serious GC with Ruby Powered by Rabbit 2.0.5 Rubyによる本気の GC Serious GC with Ruby @nari3 #sprk2012](https://reader037.vdocuments.net/reader037/viewer/2022090606/605c6d78243d56545952badb/html5/thumbnails/39.jpg)
![Page 40: Rubyによる本気の GC - Rabbit Slide Show · Rubyによる本気のGC - Serious GC with Ruby Powered by Rabbit 2.0.5 Rubyによる本気の GC Serious GC with Ruby @nari3 #sprk2012](https://reader037.vdocuments.net/reader037/viewer/2022090606/605c6d78243d56545952badb/html5/thumbnails/40.jpg)
Rubyによる本気のGC - Serious GC with Ruby Powered by Rabbit 2.0.5
結論:C死ね。[cited from `卜部昌平のあまりreblogしないtumblr']
![Page 41: Rubyによる本気の GC - Rabbit Slide Show · Rubyによる本気のGC - Serious GC with Ruby Powered by Rabbit 2.0.5 Rubyによる本気の GC Serious GC with Ruby @nari3 #sprk2012](https://reader037.vdocuments.net/reader037/viewer/2022090606/605c6d78243d56545952badb/html5/thumbnails/41.jpg)
ほんとどのGCはC or C++で書かれている
しなぁ…
![Page 42: Rubyによる本気の GC - Rabbit Slide Show · Rubyによる本気のGC - Serious GC with Ruby Powered by Rabbit 2.0.5 Rubyによる本気の GC Serious GC with Ruby @nari3 #sprk2012](https://reader037.vdocuments.net/reader037/viewer/2022090606/605c6d78243d56545952badb/html5/thumbnails/42.jpg)
Rubyによる本気のGC - Serious GC with Ruby Powered by Rabbit 2.0.5
なぜCで書く必要がある?ないはずだよ。ちゃんと調査すればJavaとかC#とか、ひょっとしたらOCamlやScalaででも用は足りる場合がほとんどなんだ。
[cited from `卜部昌平のあまりreblogしないtumblr']
![Page 43: Rubyによる本気の GC - Rabbit Slide Show · Rubyによる本気のGC - Serious GC with Ruby Powered by Rabbit 2.0.5 Rubyによる本気の GC Serious GC with Ruby @nari3 #sprk2012](https://reader037.vdocuments.net/reader037/viewer/2022090606/605c6d78243d56545952badb/html5/thumbnails/43.jpg)
![Page 44: Rubyによる本気の GC - Rabbit Slide Show · Rubyによる本気のGC - Serious GC with Ruby Powered by Rabbit 2.0.5 Rubyによる本気の GC Serious GC with Ruby @nari3 #sprk2012](https://reader037.vdocuments.net/reader037/viewer/2022090606/605c6d78243d56545952badb/html5/thumbnails/44.jpg)
RubyでGC書いてみよう!
![Page 45: Rubyによる本気の GC - Rabbit Slide Show · Rubyによる本気のGC - Serious GC with Ruby Powered by Rabbit 2.0.5 Rubyによる本気の GC Serious GC with Ruby @nari3 #sprk2012](https://reader037.vdocuments.net/reader037/viewer/2022090606/605c6d78243d56545952badb/html5/thumbnails/45.jpg)
素直に考えると...
![Page 46: Rubyによる本気の GC - Rabbit Slide Show · Rubyによる本気のGC - Serious GC with Ruby Powered by Rabbit 2.0.5 Rubyによる本気の GC Serious GC with Ruby @nari3 #sprk2012](https://reader037.vdocuments.net/reader037/viewer/2022090606/605c6d78243d56545952badb/html5/thumbnails/46.jpg)
![Page 47: Rubyによる本気の GC - Rabbit Slide Show · Rubyによる本気のGC - Serious GC with Ruby Powered by Rabbit 2.0.5 Rubyによる本気の GC Serious GC with Ruby @nari3 #sprk2012](https://reader037.vdocuments.net/reader037/viewer/2022090606/605c6d78243d56545952badb/html5/thumbnails/47.jpg)
![Page 48: Rubyによる本気の GC - Rabbit Slide Show · Rubyによる本気のGC - Serious GC with Ruby Powered by Rabbit 2.0.5 Rubyによる本気の GC Serious GC with Ruby @nari3 #sprk2012](https://reader037.vdocuments.net/reader037/viewer/2022090606/605c6d78243d56545952badb/html5/thumbnails/48.jpg)
Rubyによる本気のGC - Serious GC with Ruby Powered by Rabbit 2.0.5
これはあまり意味がない
下にいるGCの性能に影響をうける性能評価しづらい✓
下のGCが遅いと、上のGCも遅くなる
✓
✓
![Page 49: Rubyによる本気の GC - Rabbit Slide Show · Rubyによる本気のGC - Serious GC with Ruby Powered by Rabbit 2.0.5 Rubyによる本気の GC Serious GC with Ruby @nari3 #sprk2012](https://reader037.vdocuments.net/reader037/viewer/2022090606/605c6d78243d56545952badb/html5/thumbnails/49.jpg)
Rubyによる本気のGC - Serious GC with Ruby Powered by Rabbit 2.0.5
これはあまり意味がない
言語処理系にGCは1つあればいいですよ感無駄に話が複雑になっているような気がする
✓
✓
![Page 50: Rubyによる本気の GC - Rabbit Slide Show · Rubyによる本気のGC - Serious GC with Ruby Powered by Rabbit 2.0.5 Rubyによる本気の GC Serious GC with Ruby @nari3 #sprk2012](https://reader037.vdocuments.net/reader037/viewer/2022090606/605c6d78243d56545952badb/html5/thumbnails/50.jpg)
もっと違うアプローチを考えよう!
![Page 51: Rubyによる本気の GC - Rabbit Slide Show · Rubyによる本気のGC - Serious GC with Ruby Powered by Rabbit 2.0.5 Rubyによる本気の GC Serious GC with Ruby @nari3 #sprk2012](https://reader037.vdocuments.net/reader037/viewer/2022090606/605c6d78243d56545952badb/html5/thumbnails/51.jpg)
Meta-circular evaluator
![Page 52: Rubyによる本気の GC - Rabbit Slide Show · Rubyによる本気のGC - Serious GC with Ruby Powered by Rabbit 2.0.5 Rubyによる本気の GC Serious GC with Ruby @nari3 #sprk2012](https://reader037.vdocuments.net/reader037/viewer/2022090606/605c6d78243d56545952badb/html5/thumbnails/52.jpg)
Rubyによる本気のGC - Serious GC with Ruby Powered by Rabbit 2.0.5
An evaluator that is written in the same language that it evaluates is said to be metacircular.
[cited from `4.1 The Metacircular Evaluator - SICP']
![Page 53: Rubyによる本気の GC - Rabbit Slide Show · Rubyによる本気のGC - Serious GC with Ruby Powered by Rabbit 2.0.5 Rubyによる本気の GC Serious GC with Ruby @nari3 #sprk2012](https://reader037.vdocuments.net/reader037/viewer/2022090606/605c6d78243d56545952badb/html5/thumbnails/53.jpg)
簡単な例:LISPでLISP書いたった
![Page 54: Rubyによる本気の GC - Rabbit Slide Show · Rubyによる本気のGC - Serious GC with Ruby Powered by Rabbit 2.0.5 Rubyによる本気の GC Serious GC with Ruby @nari3 #sprk2012](https://reader037.vdocuments.net/reader037/viewer/2022090606/605c6d78243d56545952badb/html5/thumbnails/54.jpg)
他の具体例を調べてみる
![Page 55: Rubyによる本気の GC - Rabbit Slide Show · Rubyによる本気のGC - Serious GC with Ruby Powered by Rabbit 2.0.5 Rubyによる本気の GC Serious GC with Ruby @nari3 #sprk2012](https://reader037.vdocuments.net/reader037/viewer/2022090606/605c6d78243d56545952badb/html5/thumbnails/55.jpg)
![Page 56: Rubyによる本気の GC - Rabbit Slide Show · Rubyによる本気のGC - Serious GC with Ruby Powered by Rabbit 2.0.5 Rubyによる本気の GC Serious GC with Ruby @nari3 #sprk2012](https://reader037.vdocuments.net/reader037/viewer/2022090606/605c6d78243d56545952badb/html5/thumbnails/56.jpg)
Rubyによる本気のGC - Serious GC with Ruby Powered by Rabbit 2.0.5
もう少し詳しく
RPython(Restricted Python)で実装
Pythonの言語サブセット✓
✓
RPython -> C/LLVM/Java..✓
![Page 57: Rubyによる本気の GC - Rabbit Slide Show · Rubyによる本気のGC - Serious GC with Ruby Powered by Rabbit 2.0.5 Rubyによる本気の GC Serious GC with Ruby @nari3 #sprk2012](https://reader037.vdocuments.net/reader037/viewer/2022090606/605c6d78243d56545952badb/html5/thumbnails/57.jpg)
変換イメージ
![Page 58: Rubyによる本気の GC - Rabbit Slide Show · Rubyによる本気のGC - Serious GC with Ruby Powered by Rabbit 2.0.5 Rubyによる本気の GC Serious GC with Ruby @nari3 #sprk2012](https://reader037.vdocuments.net/reader037/viewer/2022090606/605c6d78243d56545952badb/html5/thumbnails/58.jpg)
![Page 59: Rubyによる本気の GC - Rabbit Slide Show · Rubyによる本気のGC - Serious GC with Ruby Powered by Rabbit 2.0.5 Rubyによる本気の GC Serious GC with Ruby @nari3 #sprk2012](https://reader037.vdocuments.net/reader037/viewer/2022090606/605c6d78243d56545952badb/html5/thumbnails/59.jpg)
![Page 60: Rubyによる本気の GC - Rabbit Slide Show · Rubyによる本気のGC - Serious GC with Ruby Powered by Rabbit 2.0.5 Rubyによる本気の GC Serious GC with Ruby @nari3 #sprk2012](https://reader037.vdocuments.net/reader037/viewer/2022090606/605c6d78243d56545952badb/html5/thumbnails/60.jpg)
![Page 61: Rubyによる本気の GC - Rabbit Slide Show · Rubyによる本気のGC - Serious GC with Ruby Powered by Rabbit 2.0.5 Rubyによる本気の GC Serious GC with Ruby @nari3 #sprk2012](https://reader037.vdocuments.net/reader037/viewer/2022090606/605c6d78243d56545952badb/html5/thumbnails/61.jpg)
![Page 62: Rubyによる本気の GC - Rabbit Slide Show · Rubyによる本気のGC - Serious GC with Ruby Powered by Rabbit 2.0.5 Rubyによる本気の GC Serious GC with Ruby @nari3 #sprk2012](https://reader037.vdocuments.net/reader037/viewer/2022090606/605c6d78243d56545952badb/html5/thumbnails/62.jpg)
重要なポイント
![Page 63: Rubyによる本気の GC - Rabbit Slide Show · Rubyによる本気のGC - Serious GC with Ruby Powered by Rabbit 2.0.5 Rubyによる本気の GC Serious GC with Ruby @nari3 #sprk2012](https://reader037.vdocuments.net/reader037/viewer/2022090606/605c6d78243d56545952badb/html5/thumbnails/63.jpg)
![Page 64: Rubyによる本気の GC - Rabbit Slide Show · Rubyによる本気のGC - Serious GC with Ruby Powered by Rabbit 2.0.5 Rubyによる本気の GC Serious GC with Ruby @nari3 #sprk2012](https://reader037.vdocuments.net/reader037/viewer/2022090606/605c6d78243d56545952badb/html5/thumbnails/64.jpg)
GCもRPythonで書かれている
![Page 65: Rubyによる本気の GC - Rabbit Slide Show · Rubyによる本気のGC - Serious GC with Ruby Powered by Rabbit 2.0.5 Rubyによる本気の GC Serious GC with Ruby @nari3 #sprk2012](https://reader037.vdocuments.net/reader037/viewer/2022090606/605c6d78243d56545952badb/html5/thumbnails/65.jpg)
疑問
![Page 66: Rubyによる本気の GC - Rabbit Slide Show · Rubyによる本気のGC - Serious GC with Ruby Powered by Rabbit 2.0.5 Rubyによる本気の GC Serious GC with Ruby @nari3 #sprk2012](https://reader037.vdocuments.net/reader037/viewer/2022090606/605c6d78243d56545952badb/html5/thumbnails/66.jpg)
Rubyによる本気のGC - Serious GC with Ruby Powered by Rabbit 2.0.5
GC動作中のGCはどうするのか?
GC動作中にGCが起きて、その動作中にGCが起きて…
GCの無限ループ...?✓
✓
![Page 67: Rubyによる本気の GC - Rabbit Slide Show · Rubyによる本気のGC - Serious GC with Ruby Powered by Rabbit 2.0.5 Rubyによる本気の GC Serious GC with Ruby @nari3 #sprk2012](https://reader037.vdocuments.net/reader037/viewer/2022090606/605c6d78243d56545952badb/html5/thumbnails/67.jpg)
Rubyによる本気のGC - Serious GC with Ruby Powered by Rabbit 2.0.5
RPython
GC中はGC対象のオブジェクトを作らないように気を付ける(たぶん)
mallocなどで直接メモリを切り出すlibffiを利用✓
✓
✓
![Page 68: Rubyによる本気の GC - Rabbit Slide Show · Rubyによる本気のGC - Serious GC with Ruby Powered by Rabbit 2.0.5 Rubyによる本気の GC Serious GC with Ruby @nari3 #sprk2012](https://reader037.vdocuments.net/reader037/viewer/2022090606/605c6d78243d56545952badb/html5/thumbnails/68.jpg)
GC中にGCが走ることはない
![Page 69: Rubyによる本気の GC - Rabbit Slide Show · Rubyによる本気のGC - Serious GC with Ruby Powered by Rabbit 2.0.5 Rubyによる本気の GC Serious GC with Ruby @nari3 #sprk2012](https://reader037.vdocuments.net/reader037/viewer/2022090606/605c6d78243d56545952badb/html5/thumbnails/69.jpg)
![Page 70: Rubyによる本気の GC - Rabbit Slide Show · Rubyによる本気のGC - Serious GC with Ruby Powered by Rabbit 2.0.5 Rubyによる本気の GC Serious GC with Ruby @nari3 #sprk2012](https://reader037.vdocuments.net/reader037/viewer/2022090606/605c6d78243d56545952badb/html5/thumbnails/70.jpg)
仕組み(ry
![Page 71: Rubyによる本気の GC - Rabbit Slide Show · Rubyによる本気のGC - Serious GC with Ruby Powered by Rabbit 2.0.5 Rubyによる本気の GC Serious GC with Ruby @nari3 #sprk2012](https://reader037.vdocuments.net/reader037/viewer/2022090606/605c6d78243d56545952badb/html5/thumbnails/71.jpg)
Rubyによる本気のGC - Serious GC with Ruby Powered by Rabbit 2.0.5
ただし
GCをRubyで書く仕組みがない今考えればRubiniusをいじったほうがよかったかも…?まぁいいか...✓
✓
✓
![Page 72: Rubyによる本気の GC - Rabbit Slide Show · Rubyによる本気のGC - Serious GC with Ruby Powered by Rabbit 2.0.5 Rubyによる本気の GC Serious GC with Ruby @nari3 #sprk2012](https://reader037.vdocuments.net/reader037/viewer/2022090606/605c6d78243d56545952badb/html5/thumbnails/72.jpg)
![Page 73: Rubyによる本気の GC - Rabbit Slide Show · Rubyによる本気のGC - Serious GC with Ruby Powered by Rabbit 2.0.5 Rubyによる本気の GC Serious GC with Ruby @nari3 #sprk2012](https://reader037.vdocuments.net/reader037/viewer/2022090606/605c6d78243d56545952badb/html5/thumbnails/73.jpg)
Rubyによる本気のGC - Serious GC with Ruby Powered by Rabbit 2.0.5
JikesRVM
RVM(Research Virtual Machine) = 研究用VM
GC,VM周りでたくさん論文が書かれている
✓
✓
![Page 74: Rubyによる本気の GC - Rabbit Slide Show · Rubyによる本気のGC - Serious GC with Ruby Powered by Rabbit 2.0.5 Rubyによる本気の GC Serious GC with Ruby @nari3 #sprk2012](https://reader037.vdocuments.net/reader037/viewer/2022090606/605c6d78243d56545952badb/html5/thumbnails/74.jpg)
Rubyによる本気のGC - Serious GC with Ruby Powered by Rabbit 2.0.5
JikesRVM
GCもJavaで書かれている✓
プロジェクト委員の一人がRechard Jones(RJGC著者)
✓
![Page 75: Rubyによる本気の GC - Rabbit Slide Show · Rubyによる本気のGC - Serious GC with Ruby Powered by Rabbit 2.0.5 Rubyによる本気の GC Serious GC with Ruby @nari3 #sprk2012](https://reader037.vdocuments.net/reader037/viewer/2022090606/605c6d78243d56545952badb/html5/thumbnails/75.jpg)
Rubyによる本気のGC - Serious GC with Ruby Powered by Rabbit 2.0.5
直接オブジェクトファイルを吐く
![Page 76: Rubyによる本気の GC - Rabbit Slide Show · Rubyによる本気のGC - Serious GC with Ruby Powered by Rabbit 2.0.5 Rubyによる本気の GC Serious GC with Ruby @nari3 #sprk2012](https://reader037.vdocuments.net/reader037/viewer/2022090606/605c6d78243d56545952badb/html5/thumbnails/76.jpg)
Rubyによる本気のGC - Serious GC with Ruby Powered by Rabbit 2.0.5
GCもJavaで書ける
一緒にオブジェクトファイルに変換される
✓
GC中はGCが発生しないPyPyと同じ理由✓
✓
![Page 77: Rubyによる本気の GC - Rabbit Slide Show · Rubyによる本気のGC - Serious GC with Ruby Powered by Rabbit 2.0.5 Rubyによる本気の GC Serious GC with Ruby @nari3 #sprk2012](https://reader037.vdocuments.net/reader037/viewer/2022090606/605c6d78243d56545952badb/html5/thumbnails/77.jpg)
JikesRVMの功績は「GCをJavaでかける」
だけではない
![Page 78: Rubyによる本気の GC - Rabbit Slide Show · Rubyによる本気のGC - Serious GC with Ruby Powered by Rabbit 2.0.5 Rubyによる本気の GC Serious GC with Ruby @nari3 #sprk2012](https://reader037.vdocuments.net/reader037/viewer/2022090606/605c6d78243d56545952badb/html5/thumbnails/78.jpg)
GC部分がMMTkという別部品に切り離されてい
る
![Page 79: Rubyによる本気の GC - Rabbit Slide Show · Rubyによる本気のGC - Serious GC with Ruby Powered by Rabbit 2.0.5 Rubyによる本気の GC Serious GC with Ruby @nari3 #sprk2012](https://reader037.vdocuments.net/reader037/viewer/2022090606/605c6d78243d56545952badb/html5/thumbnails/79.jpg)
Rubyによる本気のGC - Serious GC with Ruby Powered by Rabbit 2.0.5
MMTk(Memory Management Tool kit)
GCを11個保有✓
ツールキットなのでGC用の便利メソッドが沢山ある
GCづくりが簡単✓
✓
![Page 80: Rubyによる本気の GC - Rabbit Slide Show · Rubyによる本気のGC - Serious GC with Ruby Powered by Rabbit 2.0.5 Rubyによる本気の GC Serious GC with Ruby @nari3 #sprk2012](https://reader037.vdocuments.net/reader037/viewer/2022090606/605c6d78243d56545952badb/html5/thumbnails/80.jpg)
Rubyによる本気のGC - Serious GC with Ruby Powered by Rabbit 2.0.5
MMTk(Memory Management Tool kit)
VMからメモリ管理を別の部品として切り離せる
VMは取り替え可能JikesRVM✓
Harness✓
✓
✓
![Page 81: Rubyによる本気の GC - Rabbit Slide Show · Rubyによる本気のGC - Serious GC with Ruby Powered by Rabbit 2.0.5 Rubyによる本気の GC Serious GC with Ruby @nari3 #sprk2012](https://reader037.vdocuments.net/reader037/viewer/2022090606/605c6d78243d56545952badb/html5/thumbnails/81.jpg)
![Page 82: Rubyによる本気の GC - Rabbit Slide Show · Rubyによる本気のGC - Serious GC with Ruby Powered by Rabbit 2.0.5 Rubyによる本気の GC Serious GC with Ruby @nari3 #sprk2012](https://reader037.vdocuments.net/reader037/viewer/2022090606/605c6d78243d56545952badb/html5/thumbnails/82.jpg)
![Page 83: Rubyによる本気の GC - Rabbit Slide Show · Rubyによる本気のGC - Serious GC with Ruby Powered by Rabbit 2.0.5 Rubyによる本気の GC Serious GC with Ruby @nari3 #sprk2012](https://reader037.vdocuments.net/reader037/viewer/2022090606/605c6d78243d56545952badb/html5/thumbnails/83.jpg)
![Page 84: Rubyによる本気の GC - Rabbit Slide Show · Rubyによる本気のGC - Serious GC with Ruby Powered by Rabbit 2.0.5 Rubyによる本気の GC Serious GC with Ruby @nari3 #sprk2012](https://reader037.vdocuments.net/reader037/viewer/2022090606/605c6d78243d56545952badb/html5/thumbnails/84.jpg)
やたー!GC書き放題!
![Page 85: Rubyによる本気の GC - Rabbit Slide Show · Rubyによる本気のGC - Serious GC with Ruby Powered by Rabbit 2.0.5 Rubyによる本気の GC Serious GC with Ruby @nari3 #sprk2012](https://reader037.vdocuments.net/reader037/viewer/2022090606/605c6d78243d56545952badb/html5/thumbnails/85.jpg)
![Page 86: Rubyによる本気の GC - Rabbit Slide Show · Rubyによる本気のGC - Serious GC with Ruby Powered by Rabbit 2.0.5 Rubyによる本気の GC Serious GC with Ruby @nari3 #sprk2012](https://reader037.vdocuments.net/reader037/viewer/2022090606/605c6d78243d56545952badb/html5/thumbnails/86.jpg)
Javaで…
![Page 87: Rubyによる本気の GC - Rabbit Slide Show · Rubyによる本気のGC - Serious GC with Ruby Powered by Rabbit 2.0.5 Rubyによる本気の GC Serious GC with Ruby @nari3 #sprk2012](https://reader037.vdocuments.net/reader037/viewer/2022090606/605c6d78243d56545952badb/html5/thumbnails/87.jpg)
Rubyで書きたい…ッ!!
![Page 88: Rubyによる本気の GC - Rabbit Slide Show · Rubyによる本気のGC - Serious GC with Ruby Powered by Rabbit 2.0.5 Rubyによる本気の GC Serious GC with Ruby @nari3 #sprk2012](https://reader037.vdocuments.net/reader037/viewer/2022090606/605c6d78243d56545952badb/html5/thumbnails/88.jpg)
![Page 89: Rubyによる本気の GC - Rabbit Slide Show · Rubyによる本気のGC - Serious GC with Ruby Powered by Rabbit 2.0.5 Rubyによる本気の GC Serious GC with Ruby @nari3 #sprk2012](https://reader037.vdocuments.net/reader037/viewer/2022090606/605c6d78243d56545952badb/html5/thumbnails/89.jpg)
![Page 90: Rubyによる本気の GC - Rabbit Slide Show · Rubyによる本気のGC - Serious GC with Ruby Powered by Rabbit 2.0.5 Rubyによる本気の GC Serious GC with Ruby @nari3 #sprk2012](https://reader037.vdocuments.net/reader037/viewer/2022090606/605c6d78243d56545952badb/html5/thumbnails/90.jpg)
われわれにはJRubyがあるじゃないか
![Page 91: Rubyによる本気の GC - Rabbit Slide Show · Rubyによる本気のGC - Serious GC with Ruby Powered by Rabbit 2.0.5 Rubyによる本気の GC Serious GC with Ruby @nari3 #sprk2012](https://reader037.vdocuments.net/reader037/viewer/2022090606/605c6d78243d56545952badb/html5/thumbnails/91.jpg)
![Page 92: Rubyによる本気の GC - Rabbit Slide Show · Rubyによる本気のGC - Serious GC with Ruby Powered by Rabbit 2.0.5 Rubyによる本気の GC Serious GC with Ruby @nari3 #sprk2012](https://reader037.vdocuments.net/reader037/viewer/2022090606/605c6d78243d56545952badb/html5/thumbnails/92.jpg)
![Page 93: Rubyによる本気の GC - Rabbit Slide Show · Rubyによる本気のGC - Serious GC with Ruby Powered by Rabbit 2.0.5 Rubyによる本気の GC Serious GC with Ruby @nari3 #sprk2012](https://reader037.vdocuments.net/reader037/viewer/2022090606/605c6d78243d56545952badb/html5/thumbnails/93.jpg)
この部分をライブラリ化
![Page 94: Rubyによる本気の GC - Rabbit Slide Show · Rubyによる本気のGC - Serious GC with Ruby Powered by Rabbit 2.0.5 Rubyによる本気の GC Serious GC with Ruby @nari3 #sprk2012](https://reader037.vdocuments.net/reader037/viewer/2022090606/605c6d78243d56545952badb/html5/thumbnails/94.jpg)
Regicide
![Page 95: Rubyによる本気の GC - Rabbit Slide Show · Rubyによる本気のGC - Serious GC with Ruby Powered by Rabbit 2.0.5 Rubyによる本気の GC Serious GC with Ruby @nari3 #sprk2012](https://reader037.vdocuments.net/reader037/viewer/2022090606/605c6d78243d56545952badb/html5/thumbnails/95.jpg)
Rubyによる本気のGC - Serious GC with Ruby Powered by Rabbit 2.0.5
Regicde = 国王殺し
![Page 96: Rubyによる本気の GC - Rabbit Slide Show · Rubyによる本気のGC - Serious GC with Ruby Powered by Rabbit 2.0.5 Rubyによる本気の GC Serious GC with Ruby @nari3 #sprk2012](https://reader037.vdocuments.net/reader037/viewer/2022090606/605c6d78243d56545952badb/html5/thumbnails/96.jpg)
![Page 97: Rubyによる本気の GC - Rabbit Slide Show · Rubyによる本気のGC - Serious GC with Ruby Powered by Rabbit 2.0.5 Rubyによる本気の GC Serious GC with Ruby @nari3 #sprk2012](https://reader037.vdocuments.net/reader037/viewer/2022090606/605c6d78243d56545952badb/html5/thumbnails/97.jpg)
サンプルコード
![Page 98: Rubyによる本気の GC - Rabbit Slide Show · Rubyによる本気のGC - Serious GC with Ruby Powered by Rabbit 2.0.5 Rubyによる本気の GC Serious GC with Ruby @nari3 #sprk2012](https://reader037.vdocuments.net/reader037/viewer/2022090606/605c6d78243d56545952badb/html5/thumbnails/98.jpg)
Rubyによる本気のGC - Serious GC with Ruby Powered by Rabbit 2.0.5
オブジェクトの定義
class FixnumValue < Regicide::Mutator::ObjectValue # ...end
Regicide::Mutator::ObjectValueを継承
![Page 99: Rubyによる本気の GC - Rabbit Slide Show · Rubyによる本気のGC - Serious GC with Ruby Powered by Rabbit 2.0.5 Rubyによる本気の GC Serious GC with Ruby @nari3 #sprk2012](https://reader037.vdocuments.net/reader037/viewer/2022090606/605c6d78243d56545952badb/html5/thumbnails/99.jpg)
Rubyによる本気のGC - Serious GC with Ruby Powered by Rabbit 2.0.5
オブジェクト生成
class FixnumValue < Regicide::Mutator::ObjectValue # Fixnumをフィールドに持つ # オブジェクトを割り当てるメソッド def self.from_i(mutator, i) ... endend
![Page 100: Rubyによる本気の GC - Rabbit Slide Show · Rubyによる本気のGC - Serious GC with Ruby Powered by Rabbit 2.0.5 Rubyによる本気の GC Serious GC with Ruby @nari3 #sprk2012](https://reader037.vdocuments.net/reader037/viewer/2022090606/605c6d78243d56545952badb/html5/thumbnails/100.jpg)
Rubyによる本気のGC - Serious GC with Ruby Powered by Rabbit 2.0.5
from_i
# メモリ割り当てptr = mutator.alloc(0, 1, mutator.current_stack.pc)# オブジェクト生成v = self.new(ptr)# Fixnumを格納mutator.store_data_field(v.object_value, 0, org.vmmagic.unboxed.Word.from_long(i))return v
![Page 101: Rubyによる本気の GC - Rabbit Slide Show · Rubyによる本気のGC - Serious GC with Ruby Powered by Rabbit 2.0.5 Rubyによる本気の GC Serious GC with Ruby @nari3 #sprk2012](https://reader037.vdocuments.net/reader037/viewer/2022090606/605c6d78243d56545952badb/html5/thumbnails/101.jpg)
Rubyによる本気のGC - Serious GC with Ruby Powered by Rabbit 2.0.5
M&S GCは4行で書ける
class MSConstraints < org.mmtk.plan.marksweep.MSConstraints; endclass MS < org.mmtk.plan.marksweep.MS; endclass MSCollector < org.mmtk.plan.marksweep.MSCollector; endclass MSMutator < org.mmtk.plan.marksweep.MSMutator; end
![Page 102: Rubyによる本気の GC - Rabbit Slide Show · Rubyによる本気のGC - Serious GC with Ruby Powered by Rabbit 2.0.5 Rubyによる本気の GC Serious GC with Ruby @nari3 #sprk2012](https://reader037.vdocuments.net/reader037/viewer/2022090606/605c6d78243d56545952badb/html5/thumbnails/102.jpg)
動作するサンプル↓
<URL:https://github.com/authorNari/regicide/tree/master/sample>
![Page 103: Rubyによる本気の GC - Rabbit Slide Show · Rubyによる本気のGC - Serious GC with Ruby Powered by Rabbit 2.0.5 Rubyによる本気の GC Serious GC with Ruby @nari3 #sprk2012](https://reader037.vdocuments.net/reader037/viewer/2022090606/605c6d78243d56545952badb/html5/thumbnails/103.jpg)
苦労話
![Page 104: Rubyによる本気の GC - Rabbit Slide Show · Rubyによる本気のGC - Serious GC with Ruby Powered by Rabbit 2.0.5 Rubyによる本気の GC Serious GC with Ruby @nari3 #sprk2012](https://reader037.vdocuments.net/reader037/viewer/2022090606/605c6d78243d56545952badb/html5/thumbnails/104.jpg)
Rubyによる本気のGC - Serious GC with Ruby Powered by Rabbit 2.0.5
Java+JRuby
JRuby側からJavaを使うのは簡単メソッド呼び出し✓
継承とかとか✓
✓
![Page 105: Rubyによる本気の GC - Rabbit Slide Show · Rubyによる本気のGC - Serious GC with Ruby Powered by Rabbit 2.0.5 Rubyによる本気の GC Serious GC with Ruby @nari3 #sprk2012](https://reader037.vdocuments.net/reader037/viewer/2022090606/605c6d78243d56545952badb/html5/thumbnails/105.jpg)
Rubyによる本気のGC - Serious GC with Ruby Powered by Rabbit 2.0.5
Java+JRuby
Java側からJRubyを使うのは難しいけっこう意外だった✓
✓
![Page 106: Rubyによる本気の GC - Rabbit Slide Show · Rubyによる本気のGC - Serious GC with Ruby Powered by Rabbit 2.0.5 Rubyによる本気の GC Serious GC with Ruby @nari3 #sprk2012](https://reader037.vdocuments.net/reader037/viewer/2022090606/605c6d78243d56545952badb/html5/thumbnails/106.jpg)
どいうことか?
![Page 107: Rubyによる本気の GC - Rabbit Slide Show · Rubyによる本気のGC - Serious GC with Ruby Powered by Rabbit 2.0.5 Rubyによる本気の GC Serious GC with Ruby @nari3 #sprk2012](https://reader037.vdocuments.net/reader037/viewer/2022090606/605c6d78243d56545952badb/html5/thumbnails/107.jpg)
![Page 108: Rubyによる本気の GC - Rabbit Slide Show · Rubyによる本気のGC - Serious GC with Ruby Powered by Rabbit 2.0.5 Rubyによる本気の GC Serious GC with Ruby @nari3 #sprk2012](https://reader037.vdocuments.net/reader037/viewer/2022090606/605c6d78243d56545952badb/html5/thumbnails/108.jpg)
![Page 109: Rubyによる本気の GC - Rabbit Slide Show · Rubyによる本気のGC - Serious GC with Ruby Powered by Rabbit 2.0.5 Rubyによる本気の GC Serious GC with Ruby @nari3 #sprk2012](https://reader037.vdocuments.net/reader037/viewer/2022090606/605c6d78243d56545952badb/html5/thumbnails/109.jpg)
どうやるの(?_?)
![Page 110: Rubyによる本気の GC - Rabbit Slide Show · Rubyによる本気のGC - Serious GC with Ruby Powered by Rabbit 2.0.5 Rubyによる本気の GC Serious GC with Ruby @nari3 #sprk2012](https://reader037.vdocuments.net/reader037/viewer/2022090606/605c6d78243d56545952badb/html5/thumbnails/110.jpg)
RedBridge
![Page 111: Rubyによる本気の GC - Rabbit Slide Show · Rubyによる本気のGC - Serious GC with Ruby Powered by Rabbit 2.0.5 Rubyによる本気の GC Serious GC with Ruby @nari3 #sprk2012](https://reader037.vdocuments.net/reader037/viewer/2022090606/605c6d78243d56545952badb/html5/thumbnails/111.jpg)
Rubyによる本気のGC - Serious GC with Ruby Powered by Rabbit 2.0.5
RedBridge
@yokoletさん作(感謝!)✓
Javaの中でJRubyの実行環境(コンテナ)を作るコンテナにソースコードぶちこんだり、Rubyコード片を評価できる
✓
✓
![Page 112: Rubyによる本気の GC - Rabbit Slide Show · Rubyによる本気のGC - Serious GC with Ruby Powered by Rabbit 2.0.5 Rubyによる本気の GC Serious GC with Ruby @nari3 #sprk2012](https://reader037.vdocuments.net/reader037/viewer/2022090606/605c6d78243d56545952badb/html5/thumbnails/112.jpg)
![Page 113: Rubyによる本気の GC - Rabbit Slide Show · Rubyによる本気のGC - Serious GC with Ruby Powered by Rabbit 2.0.5 Rubyによる本気の GC Serious GC with Ruby @nari3 #sprk2012](https://reader037.vdocuments.net/reader037/viewer/2022090606/605c6d78243d56545952badb/html5/thumbnails/113.jpg)
Rubyによる本気のGC - Serious GC with Ruby Powered by Rabbit 2.0.5
イメージ
public static void foo(void) { // JRuby実行環境作って ScriptingContainer sc = new ScriptingContainer();
// さっきのJRubyFooクラスを読み込み Object jrubyFooClass = sc.runScriptlet(PathType.ABSOLUTE, "foo.rb");
// JRubyFoo.fooを呼び出す sc.callMethod(fooClass, "foo", Object.class);}
![Page 114: Rubyによる本気の GC - Rabbit Slide Show · Rubyによる本気のGC - Serious GC with Ruby Powered by Rabbit 2.0.5 Rubyによる本気の GC Serious GC with Ruby @nari3 #sprk2012](https://reader037.vdocuments.net/reader037/viewer/2022090606/605c6d78243d56545952badb/html5/thumbnails/114.jpg)
Regicideではこの辺の技術をなんやかんや使ってます
![Page 115: Rubyによる本気の GC - Rabbit Slide Show · Rubyによる本気のGC - Serious GC with Ruby Powered by Rabbit 2.0.5 Rubyによる本気の GC Serious GC with Ruby @nari3 #sprk2012](https://reader037.vdocuments.net/reader037/viewer/2022090606/605c6d78243d56545952badb/html5/thumbnails/115.jpg)
Regicideの悪いところ
![Page 116: Rubyによる本気の GC - Rabbit Slide Show · Rubyによる本気のGC - Serious GC with Ruby Powered by Rabbit 2.0.5 Rubyによる本気の GC Serious GC with Ruby @nari3 #sprk2012](https://reader037.vdocuments.net/reader037/viewer/2022090606/605c6d78243d56545952badb/html5/thumbnails/116.jpg)
VM作るのめんどい
![Page 117: Rubyによる本気の GC - Rabbit Slide Show · Rubyによる本気のGC - Serious GC with Ruby Powered by Rabbit 2.0.5 Rubyによる本気の GC Serious GC with Ruby @nari3 #sprk2012](https://reader037.vdocuments.net/reader037/viewer/2022090606/605c6d78243d56545952badb/html5/thumbnails/117.jpg)
Rubyによる本気のGC - Serious GC with Ruby Powered by Rabbit 2.0.5
けっきょくVMは書かないといけない
GCを評価するためにはある程度ちゃんとしたものが必要でもVMとか興味ないしさぁ…✓
✓
LISPすら作るのが億劫✓
飽きてきた✓
![Page 118: Rubyによる本気の GC - Rabbit Slide Show · Rubyによる本気のGC - Serious GC with Ruby Powered by Rabbit 2.0.5 Rubyによる本気の GC Serious GC with Ruby @nari3 #sprk2012](https://reader037.vdocuments.net/reader037/viewer/2022090606/605c6d78243d56545952badb/html5/thumbnails/118.jpg)
JVMのGCの影響を受ける
![Page 119: Rubyによる本気の GC - Rabbit Slide Show · Rubyによる本気のGC - Serious GC with Ruby Powered by Rabbit 2.0.5 Rubyによる本気の GC Serious GC with Ruby @nari3 #sprk2012](https://reader037.vdocuments.net/reader037/viewer/2022090606/605c6d78243d56545952badb/html5/thumbnails/119.jpg)
![Page 120: Rubyによる本気の GC - Rabbit Slide Show · Rubyによる本気のGC - Serious GC with Ruby Powered by Rabbit 2.0.5 Rubyによる本気の GC Serious GC with Ruby @nari3 #sprk2012](https://reader037.vdocuments.net/reader037/viewer/2022090606/605c6d78243d56545952badb/html5/thumbnails/120.jpg)
![Page 121: Rubyによる本気の GC - Rabbit Slide Show · Rubyによる本気のGC - Serious GC with Ruby Powered by Rabbit 2.0.5 Rubyによる本気の GC Serious GC with Ruby @nari3 #sprk2012](https://reader037.vdocuments.net/reader037/viewer/2022090606/605c6d78243d56545952badb/html5/thumbnails/121.jpg)
ふつうにJavaのコードとして動かす感じ
![Page 122: Rubyによる本気の GC - Rabbit Slide Show · Rubyによる本気のGC - Serious GC with Ruby Powered by Rabbit 2.0.5 Rubyによる本気の GC Serious GC with Ruby @nari3 #sprk2012](https://reader037.vdocuments.net/reader037/viewer/2022090606/605c6d78243d56545952badb/html5/thumbnails/122.jpg)
Rubyによる本気のGC - Serious GC with Ruby Powered by Rabbit 2.0.5
JVMのGCに引っ張られる
性能が引っ張られるGC停止も不可能だしきちんと性能評価しづらそう論文とか書きづらそう✓
✓
✓
![Page 123: Rubyによる本気の GC - Rabbit Slide Show · Rubyによる本気のGC - Serious GC with Ruby Powered by Rabbit 2.0.5 Rubyによる本気の GC Serious GC with Ruby @nari3 #sprk2012](https://reader037.vdocuments.net/reader037/viewer/2022090606/605c6d78243d56545952badb/html5/thumbnails/123.jpg)
Rubyによる本気のGC - Serious GC with Ruby Powered by Rabbit 2.0.5
変換ができればいいのに…
JikesRVMのブートストラップ部分にJRubyを突っ込むうまく動かなかった
JRubyがJikesRVMの秘孔を付いているらしい✓
JikesRVMがまだ未熟✓
✓
✓
![Page 124: Rubyによる本気の GC - Rabbit Slide Show · Rubyによる本気のGC - Serious GC with Ruby Powered by Rabbit 2.0.5 Rubyによる本気の GC Serious GC with Ruby @nari3 #sprk2012](https://reader037.vdocuments.net/reader037/viewer/2022090606/605c6d78243d56545952badb/html5/thumbnails/124.jpg)
Regicideの良いところ
![Page 125: Rubyによる本気の GC - Rabbit Slide Show · Rubyによる本気のGC - Serious GC with Ruby Powered by Rabbit 2.0.5 Rubyによる本気の GC Serious GC with Ruby @nari3 #sprk2012](https://reader037.vdocuments.net/reader037/viewer/2022090606/605c6d78243d56545952badb/html5/thumbnails/125.jpg)
VMが自分で書ける
![Page 126: Rubyによる本気の GC - Rabbit Slide Show · Rubyによる本気のGC - Serious GC with Ruby Powered by Rabbit 2.0.5 Rubyによる本気の GC Serious GC with Ruby @nari3 #sprk2012](https://reader037.vdocuments.net/reader037/viewer/2022090606/605c6d78243d56545952badb/html5/thumbnails/126.jpg)
Rubyによる本気のGC - Serious GC with Ruby Powered by Rabbit 2.0.5
言語処理系が自前で書ける
GCにすごく優しい処理系とか書ける
✓
言語処理系ひっくるめて検討できる
✓
![Page 127: Rubyによる本気の GC - Rabbit Slide Show · Rubyによる本気のGC - Serious GC with Ruby Powered by Rabbit 2.0.5 Rubyによる本気の GC Serious GC with Ruby @nari3 #sprk2012](https://reader037.vdocuments.net/reader037/viewer/2022090606/605c6d78243d56545952badb/html5/thumbnails/127.jpg)
Rubyによる本気のGC - Serious GC with Ruby Powered by Rabbit 2.0.5
おいしいところは全部Rubyで書ける
VM, GC, 全部Rubyで書ける✓
Cみたいに阿鼻叫喚しなくていい(かもしれない)
✓
生産性が100倍(らしい)✓
![Page 128: Rubyによる本気の GC - Rabbit Slide Show · Rubyによる本気のGC - Serious GC with Ruby Powered by Rabbit 2.0.5 Rubyによる本気の GC Serious GC with Ruby @nari3 #sprk2012](https://reader037.vdocuments.net/reader037/viewer/2022090606/605c6d78243d56545952badb/html5/thumbnails/128.jpg)
Rubyによる本気のGC - Serious GC with Ruby Powered by Rabbit 2.0.5
勝手に処理系が速くなる感
JVM速くなる = Regicide速くなる
WIN-WIN(笑)Cでも一緒か…✓
✓
✓
![Page 129: Rubyによる本気の GC - Rabbit Slide Show · Rubyによる本気のGC - Serious GC with Ruby Powered by Rabbit 2.0.5 Rubyによる本気の GC Serious GC with Ruby @nari3 #sprk2012](https://reader037.vdocuments.net/reader037/viewer/2022090606/605c6d78243d56545952badb/html5/thumbnails/129.jpg)
Rubyによる本気のGC - Serious GC with Ruby Powered by Rabbit 2.0.5
ほかのGCと比較可能
十数個のGCと性能比較ができる
✓
起動時のオプションを少しいじるだけでOK論文とかかけるかもしれない!✓
✓
![Page 130: Rubyによる本気の GC - Rabbit Slide Show · Rubyによる本気のGC - Serious GC with Ruby Powered by Rabbit 2.0.5 Rubyによる本気の GC Serious GC with Ruby @nari3 #sprk2012](https://reader037.vdocuments.net/reader037/viewer/2022090606/605c6d78243d56545952badb/html5/thumbnails/130.jpg)
githubにあげていますauthorNari/regicide
![Page 131: Rubyによる本気の GC - Rabbit Slide Show · Rubyによる本気のGC - Serious GC with Ruby Powered by Rabbit 2.0.5 Rubyによる本気の GC Serious GC with Ruby @nari3 #sprk2012](https://reader037.vdocuments.net/reader037/viewer/2022090606/605c6d78243d56545952badb/html5/thumbnails/131.jpg)
今後の展開
![Page 132: Rubyによる本気の GC - Rabbit Slide Show · Rubyによる本気のGC - Serious GC with Ruby Powered by Rabbit 2.0.5 Rubyによる本気の GC Serious GC with Ruby @nari3 #sprk2012](https://reader037.vdocuments.net/reader037/viewer/2022090606/605c6d78243d56545952badb/html5/thumbnails/132.jpg)
Rubyによる本気のGC - Serious GC with Ruby Powered by Rabbit 2.0.5
作ってみて気づいたこと
GC部分は外っ面がRubyなだけで実はCとあまり変わらない感じ…これならCで書いても一緒なのでは…✓
✓
![Page 133: Rubyによる本気の GC - Rabbit Slide Show · Rubyによる本気のGC - Serious GC with Ruby Powered by Rabbit 2.0.5 Rubyによる本気の GC Serious GC with Ruby @nari3 #sprk2012](https://reader037.vdocuments.net/reader037/viewer/2022090606/605c6d78243d56545952badb/html5/thumbnails/133.jpg)
Rubyによる本気のGC - Serious GC with Ruby Powered by Rabbit 2.0.5
作ってみて気づいたこと
実はGC実装に特化したミニ言語が欲しいだけなのか…?今後はそちら方面で攻めてみたい✓
✓
![Page 134: Rubyによる本気の GC - Rabbit Slide Show · Rubyによる本気のGC - Serious GC with Ruby Powered by Rabbit 2.0.5 Rubyによる本気の GC Serious GC with Ruby @nari3 #sprk2012](https://reader037.vdocuments.net/reader037/viewer/2022090606/605c6d78243d56545952badb/html5/thumbnails/134.jpg)
まとめ
![Page 135: Rubyによる本気の GC - Rabbit Slide Show · Rubyによる本気のGC - Serious GC with Ruby Powered by Rabbit 2.0.5 Rubyによる本気の GC Serious GC with Ruby @nari3 #sprk2012](https://reader037.vdocuments.net/reader037/viewer/2022090606/605c6d78243d56545952badb/html5/thumbnails/135.jpg)
Rubyによる本気のGC - Serious GC with Ruby Powered by Rabbit 2.0.5
まとめ
やっぱりRubyの話できなかった
✓
C死ねと思って作ったRegicideがすでに死にそう
✓
![Page 136: Rubyによる本気の GC - Rabbit Slide Show · Rubyによる本気のGC - Serious GC with Ruby Powered by Rabbit 2.0.5 Rubyによる本気の GC Serious GC with Ruby @nari3 #sprk2012](https://reader037.vdocuments.net/reader037/viewer/2022090606/605c6d78243d56545952badb/html5/thumbnails/136.jpg)
ご清聴ありがとうございました
![Page 137: Rubyによる本気の GC - Rabbit Slide Show · Rubyによる本気のGC - Serious GC with Ruby Powered by Rabbit 2.0.5 Rubyによる本気の GC Serious GC with Ruby @nari3 #sprk2012](https://reader037.vdocuments.net/reader037/viewer/2022090606/605c6d78243d56545952badb/html5/thumbnails/137.jpg)