SlideShare une entreprise Scribd logo
1  sur  222
Télécharger pour lire hors ligne
われわれは、GCをX
      倍遅くできる
                 We can make the GC X times slower
                                   than the original

                                                                   nari/中村 成洋
                                      ネットワーク応用通信研究所
われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original   Powered by Rabbit 0.6.5
自己紹介
自己紹介


       ✓ nari/中村 成洋
              ✓ @nari3, id:authorNari

       ✓ NaCl勤務


                                                                                  4/221
われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original   Powered by Rabbit 0.6.5
自己紹介

       ✓ CRubyコミッタ
       ✓ 主にGCについて考える
       ✓ 「俺がGCだ」
         (こうですか、わかりません><)

                                                                                  5/221
われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original   Powered by Rabbit 0.6.5
宣伝タイム
本を書きました
今年はGC生誕50周年
買うなら今
もう3刷が
買えます
持ってる人
ノシ
ありがとうございます
   m(_ _)m
全部読んだ人
ノシ
本当に
ありがとうございます
持ってない人は
ぜひサイン会で
(3日目)!
いまから話すこと
いまから話すこと


       ✓ GCのこと
       ✓ CRubyのこと
       ✓ CRubyGCのこと


                                                                                19/221
われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original   Powered by Rabbit 0.6.5
話さないこと
話さないこと


       ✓ CGのこと
       ✓ クールなGCクラスの使い方
       ✓ Rubyのこと


                                                                                21/221
われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original   Powered by Rabbit 0.6.5
想定外だったこと


       ✓ まさかの大ホール
       ✓ マニアックすぎる懸念


                                                                                22/221
われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original   Powered by Rabbit 0.6.5
でも

       ✓ @kakutani「ぶちかましてくださ
         い」
       ✓ やりましょう
              ✓ お父さん張り切っちゃうぞ系


                                                                                23/221
われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original   Powered by Rabbit 0.6.5
今日の話題
今日の話題


       ✓ CRubyGC
       ✓ LazySweepGC
       ✓ 未来的CRubyGC


                                                                                25/221
われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original   Powered by Rabbit 0.6.5
今日の話題


       ✓ CRubyGC
       ✓ LazySweepGC
       ✓ 未来的CRubyGC


                                                                                26/221
われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original   Powered by Rabbit 0.6.5
CRubyGC
GC = ゴミ集め
「不要になった
オブジェクト(ゴミ)
   処理機」
GCの特徴


       ✓ 闇に潜んでゴミを断つ
       ✓ 誰も知らない知られちゃいけない


                                                                                30/221
われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original   Powered by Rabbit 0.6.5
Ninja?
  Guiri R. Reyes:http://www.flickr.com/photos/grrphoto/152833988/
ブラックボックスがゆえ
  不当に扱われる
「よくわかりませんけど
   GCが悪さ
  していそうです」
そんなことないよ
GCはトモダチ
竹内郁雄先生曰く

                           GCを備えた言語での生
                           産性は、GCを備えてい
                           ない同等の言語に比べ
                           て30%は増加します。
          [cited from `ガベージコレクションのアルゴリズムと実装、
                                        前書き']

                                                                                36/221
われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original   Powered by Rabbit 0.6.5
ってことは


       ✓ 1日 = 8時間
       ✓ 10年 = 142400時間
       ✓ 42720時間 = 365日


                                                                                37/221
われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original   Powered by Rabbit 0.6.5
RubyKaigi 120回分
     ですね
GCで浮いた時間で
RubyKaigiに出席
今日はそんなGC
 の話をします
RubyGC = Rubyのオブジェクトへ
          のGC
オブジェクトとは




                                                                                42/221
われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original   Powered by Rabbit 0.6.5
オブジェクトとは




                                                                                43/221
われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original   Powered by Rabbit 0.6.5
Rubyヒープブロック




                                                                                44/221
われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original   Powered by Rabbit 0.6.5
Rubyヒープ




                                                                                45/221
われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original   Powered by Rabbit 0.6.5
CRubyのGC

       ✓ マーク&スイープ
       ✓ 生きているオブジェクトに印付け
         (マーク)
       ✓ マークがないオブジェクト(ゴミ)を
         掃除(スイープ)

                                                                                46/221
われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original   Powered by Rabbit 0.6.5
ルートとは




                                                                                47/221
われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original   Powered by Rabbit 0.6.5
こんなプログラム




                                                                                48/221
われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original   Powered by Rabbit 0.6.5
マークフェーズ




                                                                                49/221
われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original   Powered by Rabbit 0.6.5
マーク完了後のRubyヒープ




                                                                                50/221
われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original   Powered by Rabbit 0.6.5
スイープ




                                                                                51/221
われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original   Powered by Rabbit 0.6.5
その他の特徴
保守的なGC
保守的なGC

       ✓ 偽ポインタ(false pointer)
              ✓ 実際には数値などの非ポインタ

       ✓ たぶんポインタじゃね?(保守的
         思想)

                                                                                55/221
われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original   Powered by Rabbit 0.6.5
問題


       ✓ エアオブジェクトが増える
              ✓ 死んでいるのに生きていると見なされ
                る



                                                                                56/221
われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original   Powered by Rabbit 0.6.5
現実世界でも
似たような事例
現実的保守的GC問題

       ✓ エア老人問題
       ✓ 186歳だけど戸籍ある…
       ✓ 役人「何も言われないし、
         きっと生きてるんだろうなぁ」
       ✓ 保守的思想 = 戸籍の保守的GC
                                                                                58/221
われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original   Powered by Rabbit 0.6.5
今日の話題


       ✓ CRubyGC
       ✓ LazySweepGC
       ✓ 未来的CRubyGC


                                                                                59/221
われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original   Powered by Rabbit 0.6.5
LazySweepGC
CRubyGCの問題点とは?
Stop the world!!
Stop the world

       ✓ GCによるアプリの停止
       ✓ 停止時間が重要となるアプリでは
         致命的
              ✓ ゲーム、ロボット


                                                                                63/221
われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original   Powered by Rabbit 0.6.5
なぜ止まるか?
なぜ止まるか?
       ✓ アルゴリズム(マークスイープ)が
         まずい
       ✓ 「GC最大停止時間」と
         「データ量」が比例
       ✓ オブジェクトが増えれば増えるほ
         ど止まる
                                                                                65/221
われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original   Powered by Rabbit 0.6.5
CRubyGCはオブジェクト
 の増加に対して鈍感
CRubyGCさん曰く
「お前は一度に
GCするオブジェクトを
覚えているのか?」
解決案
LazySweep
LazySweep

       ✓ スイープの遅延
       ✓ オブジェクトが必要になってから
         スイープ
              ✓ 空いたオブジェクトを割り当て

       ✓ スイープの負荷分散
                                                                                70/221
われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original   Powered by Rabbit 0.6.5
今回の本題
「LazySweepをCRubyGCに
     実装しました」
       という話
覚えているでしょうか?
rubykaigi2008
(デビュー戦)
LazySweep!
実は
パッチまで
なぜ今頃?
歴史を辿る
2008/3 : nariはパッチを作成した
2008/6 : rubykaigi2008
2008/7/1 : nariがコミッタに
2008/7/2 : nariがうっかりコミットした
「コミットが滑った」
3日後…
2008/7/5 : nariがrevertした
revertの理由

       ✓ もう少し速くしたかった
              ✓ VM方面の方からもクレームが

       ✓ 根本的に実装がタコなんじゃ?
              ✓ 私の実力不足


                                                                                86/221
われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original   Powered by Rabbit 0.6.5
2009/7/28 : rubykaigi2009
rubykaigi2009
LazySweepを
忘れていた
(黒歴史化)
質疑応答で
前田さん「LazySweepは何で外れたの?」
ささださん「あれ早く作って欲しい」
まつもとさん「あれって外れちゃったんだっ
         け?」
nari (来年のRubyKaigiまでには作らね
           ば…)
RDD
(RubyKaigi Driven
  Development)
なんやかんや作り直し

       ✓ 3月くらいに着手
              ✓ 執筆が一段落

       ✓ 5月くらいにコミット
       ✓ ruby1.9.2には間に合わなかった

                                                                                96/221
われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original   Powered by Rabbit 0.6.5
trunkへのコミット

            Fri May 28 19:37:47 2010 Narihiro Nakamura <authorNari@gmail.com>

                   * gc.c: use simple lazy sweep algorithm for response performance
                    gain. See [ruby-dev:41067].

                   * object.c: FL_MARK of some objects by lazy sweep is copied when
                    RVALUE is cloned. These objects are not marked in the mark phase.
                    So delete FL_MARK.

                   * class.c: ditto.



                                                                                         97/221
われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original            Powered by Rabbit 0.6.5
新LazySweepの説明
LazySweepの流れ
(1):マーク後




                                                                              100/221
われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original   Powered by Rabbit 0.6.5
(2):オブジェクト欲しい




                                                                              101/221
われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original   Powered by Rabbit 0.6.5
(3):スイープ(ブロック単位)




                                                                              102/221
われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original   Powered by Rabbit 0.6.5
(4):足りなくなったら




                                                                              103/221
われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original   Powered by Rabbit 0.6.5
(4):スイープ(ブロック単位)




                                                                              104/221
われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original   Powered by Rabbit 0.6.5
コレの繰り返し
デモアプリ
「Kaboom!!」の紹介
「Kaboom」 吹き飛ばしゲー
リアルGCを強く意識
デモ
$ruby kaboom.rb
GC負荷モード
Rubyヒープビジュアライザ
      もあるよ
デモ
$ ruby demo.rb 1
灰:使用中 白:未使用
新LazySweepの場合
デモ
$ ruby demo.rb 1
(違うwindowで)
灰:使用中 白:未使用 黒:マーク付き
あれ、バグか…?
       ✓ 黒が残るのはファイナライズ待ち
         オブジェクト
       ✓ Sweepが完全終わってからファイ
         ナライズ
       ✓ 一瞬なので残っているように見え
         る
                                                                              117/221
われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original   Powered by Rabbit 0.6.5
実装上の工夫
実装上の工夫


       ✓ 最大停止時間の緩和
       ✓ Rubyヒープ構造改革


                                                                              119/221
われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original   Powered by Rabbit 0.6.5
実装上の工夫


       ✓ 最大停止時間の緩和
       ✓ Rubyヒープ構造改革


                                                                              120/221
われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original   Powered by Rabbit 0.6.5
最大停止時間の緩和
Rubyヒープを拡張する
    タイミング
前のCRubyGC




                                                                              123/221
われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original   Powered by Rabbit 0.6.5
前のCRubyGC




                                                                              124/221
われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original   Powered by Rabbit 0.6.5
前のCRubyGC




                                                                              125/221
われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original   Powered by Rabbit 0.6.5
LazySweepの場合
LazySweep




                                                                              127/221
われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original   Powered by Rabbit 0.6.5
LazySweep




                                                                              128/221
われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original   Powered by Rabbit 0.6.5
メリット&デメリット

       ✓ メリット
              ✓ 大量に割り当て要求があったときの最
                大停止時間の緩和
                    ✓ マーク後すぐに大量のオブジェクト要求があると
                      マークスイープと一緒



                                                                              129/221
われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original   Powered by Rabbit 0.6.5
メリット&デメリット
       ✓ デメリット
       ✓ カウント分、マークに少しだけ負荷
              ✓ マーク済みオブジェクトはカウントしな
                いのでまだマシ
              ✓ スイープ時にカウント処理しなくていい
                    ✓ malloc_limitの計算に使用(いらないかも?)

                                                                              130/221
われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original   Powered by Rabbit 0.6.5
実装上の工夫


       ✓ 最大停止時間の緩和
       ✓ Rubyヒープ構造改革


                                                                              131/221
われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original   Powered by Rabbit 0.6.5
Rubyヒープ構造改革
Rubyヒープ構造




                                                                              133/221
われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original   Powered by Rabbit 0.6.5
Rubyヒープブロック追加時




                                                                              134/221
われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original   Powered by Rabbit 0.6.5
実はソートされる




                                                                              135/221
われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original   Powered by Rabbit 0.6.5
何が困るか?
問題
       ✓ 追加されるRubyヒープブロックが
         どこに入るか分からない
       ✓ どこまでスイープしたか管理する
         のが大変
              ✓ indexを持つ => 変わる…。
              ✓ アドレスを持つ => 変わる…。

                                                                              137/221
われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original   Powered by Rabbit 0.6.5
解決策
分離




                                                                              139/221
われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original   Powered by Rabbit 0.6.5
スイープ対象がスッキリ




                                                                              140/221
われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original   Powered by Rabbit 0.6.5
追加も平気




                                                                              141/221
われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original   Powered by Rabbit 0.6.5
メリット

       ✓ アドレスが変わらないので
         LazySweepしやすい
              ✓ 前のパッチはフラグとか使って大変
                だった

       ✓ 今後の改善にも生かせそう

                                                                              142/221
われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original   Powered by Rabbit 0.6.5
その他、細かい仕様


       ✓ GC.startは今までと同じ
              ✓ M&Sでやる
              ✓ LazySweepとは別に用意



                                                                              143/221
われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original   Powered by Rabbit 0.6.5
検討したけどやらなかったこ
      と
non-freelist実装
freelistとは




                                                                              146/221
われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original   Powered by Rabbit 0.6.5
こうする




                                                                              147/221
われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original   Powered by Rabbit 0.6.5
狙い


       ✓ freelistってCoWに悪い
       ✓ わざわざリンクするの遅くない?


                                                                              148/221
われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original   Powered by Rabbit 0.6.5
検討結果:ダメだった
問題
空のヒープブロックを解放
    できない
freelistの場合




                                                                              152/221
われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original   Powered by Rabbit 0.6.5
non-freelistの場合




                                                                              153/221
われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original   Powered by Rabbit 0.6.5
以下、余談
ビットマップマーキングの場合


       ✓ 空きヒープブロックの検知が速い
         のでnon-freelistできるかもしれな
         い


                                                                              155/221
われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original   Powered by Rabbit 0.6.5
C拡張ライブラリ作成者、コ
 アデベロッパの皆様へ
マークを消さないようにして
    ください
LazySweepの怖さ


       ✓ マークがオブジェクトに残ってい
         る
       ✓ ※コレを消してしまうとスイープ時
         に解放

                                                                              158/221
われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original   Powered by Rabbit 0.6.5
実際にはまったこと
オブジェクトのコピー




                                                                              160/221
われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original   Powered by Rabbit 0.6.5
マークの時に問題が…




                                                                              161/221
われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original   Powered by Rabbit 0.6.5
スイープ時に…




                                                                              162/221
われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original   Powered by Rabbit 0.6.5
時間差SEGV


       ✓ スイープ時にオブジェクトC, Dが
         解放されてしまう
       ✓ 時間差でSEGVェ...


                                                                              163/221
われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original   Powered by Rabbit 0.6.5
マークには気を付けて…
性能評価
ベンチマーク


       ✓ bm_gc_flagmentation.rb
              ✓ 疑似的なフラグメンテーション
              ✓ 狙い:長時間動作のプログラムでどれ
                くらいの改善?


                                                                              166/221
われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original   Powered by Rabbit 0.6.5
GC総停止時間




                                                                              167/221
われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original   Powered by Rabbit 0.6.5
GC最大停止時間




                                                                              168/221
われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original   Powered by Rabbit 0.6.5
デモ
$ruby demo.rb 2
   二画面で
よさげ
LazySweepはいつから使える?


       ✓ trunkにはコミット済み
       ✓ ruby 1.9.3(??)


                                                                              172/221
われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original   Powered by Rabbit 0.6.5
今日の話題


       ✓ CRubyGC
       ✓ LazySweepGC
       ✓ 未来的CRubyGC


                                                                              173/221
われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original   Powered by Rabbit 0.6.5
未来的CRubyGC
やることはいっぱいある!
有名な問題
保守的GC
保守的GCを実装した言語処理
        系はレア

       ✓ Ruby
       ✓ Gauche
       ✓ …?

                                                                              178/221
われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original   Powered by Rabbit 0.6.5
言語処理系を作るときの二択


       ✓ 保守的GC(Dead)か…
       ✓ 正確なGC(or Alive)か…
       ✓ 負の遺産?


                                                                              179/221
われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original   Powered by Rabbit 0.6.5
よく言われる問題


       ✓ 偽ポインタ問題(別名:非実在オ
         ブジェクト問題)
       ✓ コピーGC使えないよ問題


                                                                              180/221
われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original   Powered by Rabbit 0.6.5
でも
本当に問題か?
偽ポインタは本当に多い?
       ✓ Rubyのオブジェクトは5ワード固
         定
              ✓ チェックで大分弾ける

       ✓ 実アプリで問題になった例を聞か
         ない
              ✓ どんくらいあるんだろう?

                                                                              183/221
われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original   Powered by Rabbit 0.6.5
コピーGCって本当にいいことば
         かり?

       ✓ CoWに悪い
              ✓ ※JRubyとかRubiniusとかどうよ?

       ✓ キャッシュに悪いかも
              ✓ GC後はキャッシュミス連発?

                                                                              184/221
われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original   Powered by Rabbit 0.6.5
それよりもメリット
メリット

       ✓ コアのコード書くの楽
       ✓ C拡張ライブラリ書くのが楽
       ✓ コアの開発をドライブするために
         生産性は大事

                                                                              186/221
われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original   Powered by Rabbit 0.6.5
もっとも大きな問題
停止型のGCアルゴリズム
近未来


       ✓ 大容量化
              ✓ 大量のオブジェクト生成

       ✓ Ruby≒Rails(サーバサイド)


                                                                              189/221
われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original   Powered by Rabbit 0.6.5
非停止型のGCアルゴリズ
   ムへの移行
問題解決の最大ハードル
ライトバリア
ライトバリア

       ✓ ライトバリアは必須
       ✓ C拡張ライブラリに手を入れる
       ✓ 今までの資産が使えなくなる恐
         れ?
       ✓ Ruby2.0で対応?
                                                                              193/221
われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original   Powered by Rabbit 0.6.5
スムーズな移行を
 目指すために
ライトバリア挿入支援

       ✓ ココにライトバリア入ってません
         よ…的な警告を出す
              ✓ スムーズな移行

       ✓ GC本共著者の相川さんの研究が
         あった

                                                                              195/221
われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original   Powered by Rabbit 0.6.5
まとめると
CRubyGCをどうしたいか?


       ✓ CRubyにあった進化をしたい
       ✓ 保守的GCでどれだけいけるか?


                                                                              197/221
われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original   Powered by Rabbit 0.6.5
とはいえ
「千里の道も一歩から」
コツコツ行こうぜ!
個人的なコツコツ予定


       ✓ 賢いオブジェクトアロケート
       ✓ マーク時間の短縮


                                                                              201/221
われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original   Powered by Rabbit 0.6.5
賢いオブジェクトアロケート
賢い
                    オブジェクトアロケート




                                                                              203/221
われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original   Powered by Rabbit 0.6.5
考え方
       ✓ よく使われるものをよく使わせる
       ✓ あまり使われないものを後に使わ
         せる
              ✓ 解放されやすくなる

       ✓ 本当か?(CPythonだからうまく
         いった?)
                                                                              204/221
われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original   Powered by Rabbit 0.6.5
マーク時間の短縮
案

       ✓ マーク並列化
       ✓ マークの再帰をやめる
       ✓ シンボルなどをマーク対象から外
         す

                                                                              206/221
われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original   Powered by Rabbit 0.6.5
その他
その他


       ✓ 特定の型を特別にアロケート(文
         字列専用ヒープとか)
       ✓ BoehmGC化


                                                                              208/221
われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original   Powered by Rabbit 0.6.5
みなさんに
お願いしたいこと
Rubyistのみなさま
情報が欲しい


       ✓ こんなアプリでGCが遅いとか
       ✓ とにかく公開してくれるといい
              ✓ ご家庭のブログでも、MLでも、どこでも



                                                                              211/221
われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original   Powered by Rabbit 0.6.5
研究畑のみなさま
いろいろ公開して欲しい

       ✓ Rejectされた論文とか
       ✓ せめてソースコードとか…
       ✓ 見える所に情報を書いてもらえる
         と嬉しい

                                                                              213/221
われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original   Powered by Rabbit 0.6.5
暇なみなさま
大チャンス


       ✓ RubyGCはまだまだ途上です
       ✓ Rubyの中でも狙い目
       ✓ 未踏的なネタで一つどうですか?


                                                                              215/221
われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original   Powered by Rabbit 0.6.5
暇つぶしに

       ✓ やってみては
       ✓ 全然うまくいかない
       ✓ だから楽しい
       ✓ 最高の暇つぶし

                                                                              216/221
われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original   Powered by Rabbit 0.6.5
今日のまとめ
今日のまとめ

       ✓ GCを遅く(遅延)できたよー
       ✓ 今後もコツコツ改善(コツコツ大
         事)
       ✓ GCの妄想楽しいです(^q^)

                                                                              218/221
われわれは、GCをX倍遅くできる - We can make the GC X times slower than the original   Powered by Rabbit 0.6.5
提供
(株)ネットワーク
応用通信研究所
質疑応答
 タイム

Contenu connexe

En vedette

G1GCへ伸びていた「いばらの道」
G1GCへ伸びていた「いばらの道」G1GCへ伸びていた「いばらの道」
G1GCへ伸びていた「いばらの道」Narihiro Nakamura
 
Parallel worlds of CRuby's GC
Parallel worlds of CRuby's GCParallel worlds of CRuby's GC
Parallel worlds of CRuby's GCNarihiro Nakamura
 
地獄のGC本スピンオフ
地獄のGC本スピンオフ地獄のGC本スピンオフ
地獄のGC本スピンオフNarihiro Nakamura
 
円環の理(Garbage Collection)
円環の理(Garbage Collection)円環の理(Garbage Collection)
円環の理(Garbage Collection)Narihiro Nakamura
 
Java hotspot vmに おけるGCの振る舞い
Java hotspot vmにおけるGCの振る舞いJava hotspot vmにおけるGCの振る舞い
Java hotspot vmに おけるGCの振る舞いDi Ai
 
第六回渋谷Java Java8のJVM監視を考える
第六回渋谷Java Java8のJVM監視を考える第六回渋谷Java Java8のJVM監視を考える
第六回渋谷Java Java8のJVM監視を考えるchonaso
 

En vedette (12)

G1GCへ伸びていた「いばらの道」
G1GCへ伸びていた「いばらの道」G1GCへ伸びていた「いばらの道」
G1GCへ伸びていた「いばらの道」
 
Fxxking gc.c
Fxxking gc.cFxxking gc.c
Fxxking gc.c
 
GC黄金時代
GC黄金時代GC黄金時代
GC黄金時代
 
Parallel worlds of CRuby's GC
Parallel worlds of CRuby's GCParallel worlds of CRuby's GC
Parallel worlds of CRuby's GC
 
RUBYLAND
RUBYLANDRUBYLAND
RUBYLAND
 
地獄のGC本スピンオフ
地獄のGC本スピンオフ地獄のGC本スピンオフ
地獄のGC本スピンオフ
 
Rubyによる本気のGC
Rubyによる本気のGCRubyによる本気のGC
Rubyによる本気のGC
 
CRubyGCの並列世界
CRubyGCの並列世界CRubyGCの並列世界
CRubyGCの並列世界
 
円環の理(Garbage Collection)
円環の理(Garbage Collection)円環の理(Garbage Collection)
円環の理(Garbage Collection)
 
Java hotspot vmに おけるGCの振る舞い
Java hotspot vmにおけるGCの振る舞いJava hotspot vmにおけるGCの振る舞い
Java hotspot vmに おけるGCの振る舞い
 
第六回渋谷Java Java8のJVM監視を考える
第六回渋谷Java Java8のJVM監視を考える第六回渋谷Java Java8のJVM監視を考える
第六回渋谷Java Java8のJVM監視を考える
 
Java8勉強会
Java8勉強会Java8勉強会
Java8勉強会
 

Plus de Narihiro Nakamura

桐島、Rubyやめるってよ
桐島、Rubyやめるってよ桐島、Rubyやめるってよ
桐島、RubyやめるってよNarihiro Nakamura
 
Parallel worlds of CRuby's GC
Parallel worlds of CRuby's GCParallel worlds of CRuby's GC
Parallel worlds of CRuby's GCNarihiro Nakamura
 
シャイなRubyistがRubyKaigiでできること
シャイなRubyistがRubyKaigiでできることシャイなRubyistがRubyKaigiでできること
シャイなRubyistがRubyKaigiでできることNarihiro Nakamura
 
GC生誕50周年を祝って
GC生誕50周年を祝ってGC生誕50周年を祝って
GC生誕50周年を祝ってNarihiro Nakamura
 
シャイなRubyistにできること
シャイなRubyistにできることシャイなRubyistにできること
シャイなRubyistにできることNarihiro Nakamura
 
Railsハイパー実践講座-第35回NaCl勉強会
Railsハイパー実践講座-第35回NaCl勉強会Railsハイパー実践講座-第35回NaCl勉強会
Railsハイパー実践講座-第35回NaCl勉強会Narihiro Nakamura
 
Androidの中身-第26回NaCl社内勉強会
Androidの中身-第26回NaCl社内勉強会Androidの中身-第26回NaCl社内勉強会
Androidの中身-第26回NaCl社内勉強会Narihiro Nakamura
 
RubyのGC改善による私のエコライフ
RubyのGC改善による私のエコライフRubyのGC改善による私のエコライフ
RubyのGC改善による私のエコライフNarihiro Nakamura
 
本当は怖いObjectSpace.each_object
本当は怖いObjectSpace.each_object本当は怖いObjectSpace.each_object
本当は怖いObjectSpace.each_objectNarihiro Nakamura
 
Talk In Point Of Gc Once In While
Talk In Point Of Gc Once In WhileTalk In Point Of Gc Once In While
Talk In Point Of Gc Once In WhileNarihiro Nakamura
 
Rubyはゲームの夢を見るか
Rubyはゲームの夢を見るかRubyはゲームの夢を見るか
Rubyはゲームの夢を見るかNarihiro Nakamura
 

Plus de Narihiro Nakamura (15)

桐島、Rubyやめるってよ
桐島、Rubyやめるってよ桐島、Rubyやめるってよ
桐島、Rubyやめるってよ
 
Parallel worlds of CRuby's GC
Parallel worlds of CRuby's GCParallel worlds of CRuby's GC
Parallel worlds of CRuby's GC
 
シャイなRubyistがRubyKaigiでできること
シャイなRubyistがRubyKaigiでできることシャイなRubyistがRubyKaigiでできること
シャイなRubyistがRubyKaigiでできること
 
GC生誕50周年を祝って
GC生誕50周年を祝ってGC生誕50周年を祝って
GC生誕50周年を祝って
 
GC本のツクリカタ
GC本のツクリカタGC本のツクリカタ
GC本のツクリカタ
 
シャイなRubyistにできること
シャイなRubyistにできることシャイなRubyistにできること
シャイなRubyistにできること
 
Railsハイパー実践講座-第35回NaCl勉強会
Railsハイパー実践講座-第35回NaCl勉強会Railsハイパー実践講座-第35回NaCl勉強会
Railsハイパー実践講座-第35回NaCl勉強会
 
Androidの中身-第26回NaCl社内勉強会
Androidの中身-第26回NaCl社内勉強会Androidの中身-第26回NaCl社内勉強会
Androidの中身-第26回NaCl社内勉強会
 
RubyのGC改善による私のエコライフ
RubyのGC改善による私のエコライフRubyのGC改善による私のエコライフ
RubyのGC改善による私のエコライフ
 
絶対復習について
絶対復習について絶対復習について
絶対復習について
 
AlgorithmDesign01
AlgorithmDesign01AlgorithmDesign01
AlgorithmDesign01
 
make of MiniGC
make of MiniGCmake of MiniGC
make of MiniGC
 
本当は怖いObjectSpace.each_object
本当は怖いObjectSpace.each_object本当は怖いObjectSpace.each_object
本当は怖いObjectSpace.each_object
 
Talk In Point Of Gc Once In While
Talk In Point Of Gc Once In WhileTalk In Point Of Gc Once In While
Talk In Point Of Gc Once In While
 
Rubyはゲームの夢を見るか
Rubyはゲームの夢を見るかRubyはゲームの夢を見るか
Rubyはゲームの夢を見るか
 

われわれは、GCをX倍遅くできる