SlideShare una empresa de Scribd logo
1 de 170
Descargar para leer sin conexión
CRubyGCの並列
                       世界
                                     Parallel world of CRuby's GC

                                              nari/中村 成洋
                                      ネットワーク応用通信研究所
CRubyGCの並列世界 - Parallel world of CRuby's GC                Powered by Rabbit 0.9.3
提供




                                                            1/169
CRubyGCの並列世界 - Parallel world of CRuby's GC        Powered by Rabbit 0.9.3
本題へ
「GCって何?」って人
いませんね。
現在のCRubyの
    ゴミ集め
    CRuby's GC
CRubyのGC(現在)
                                  CRuby's GC(now)


       ✓ 1コアだけでゴミ集め
       ✓ 大量のゴミがあったとき1人で集
         めるのは大変

                                                             7/169
CRubyGCの並列世界 - Parallel world of CRuby's GC         Powered by Rabbit 0.9.3
どうすればよいか?
並列化
並列に
ゴミ集めしようぜ!
   http://www.flickr.com/photos/knallaerbse/2863161933/
Parallel world of
   CRuby's GC


            nari
自己紹介
Self introduction
etc


       ✓ twitter - @nari3
       ✓ blog - I am Cruby
       ✓ etc => http://www.narihiro.info/

                                                           14/169
CRubyGCの並列世界 - Parallel world of CRuby's GC         Powered by Rabbit 0.9.3
近年のGCブーム
Recently gc movement
近年のGCブーム
                            Recently gc movement


       ✓ 魔法少女まどか☆マギカ(アニメ)
       ✓ 少女が成長してGCになる話
               ✓ GC少女まどか☆マギカ


                                                          16/169
CRubyGCの並列世界 - Parallel world of CRuby's GC        Powered by Rabbit 0.9.3
このブームに
乗り遅れない
ように
(平積みされてた)
Don't miss it
もう一冊!!
(600円)
CRubyのGC
 CRuby's GC
CRubyのGC
       ✓ マーク&スイープ Mark&Sweep
       ✓ ルートを辿って生きているオブ
         ジェクトに印付け(マーク)
         Mark all live objects
       ✓ マークがないオブジェクト(ゴミ)を
         掃除(スイープ)
         Sweep all dead objects
                                                       21/169
CRubyGCの並列世界 - Parallel world of CRuby's GC     Powered by Rabbit 0.9.3
ルートとは




                                                             22/169
CRubyGCの並列世界 - Parallel world of CRuby's GC           Powered by Rabbit 0.9.3
こんなプログラム




                                                     23/169
CRubyGCの並列世界 - Parallel world of CRuby's GC   Powered by Rabbit 0.9.3
注意:
あなたがこのプレゼンでみ
 た最後のRubyコード
Mark phase




                                                           25/169
CRubyGCの並列世界 - Parallel world of CRuby's GC         Powered by Rabbit 0.9.3
マーク完了後のRubyヒープ
                     Ruby's heap after marking




                                                        26/169
CRubyGCの並列世界 - Parallel world of CRuby's GC      Powered by Rabbit 0.9.3
未マークオブジェクトをSweep
                                              Sweep phase




                                                                   27/169
CRubyGCの並列世界 - Parallel world of CRuby's GC                 Powered by Rabbit 0.9.3
特徴
Features
特徴
                                              Features


       ✓ Stop the worldなアルゴリズム
         STW algorithm
       ✓ シングルスレッド実行
         Single thread execute

                                                                29/169
CRubyGCの並列世界 - Parallel world of CRuby's GC              Powered by Rabbit 0.9.3
特徴
                                              Features


       ✓ Stop the worldなアルゴリズム
         STW algorithm
       ✓ シングルスレッド実行
         Single thread execute

                                                                30/169
CRubyGCの並列世界 - Parallel world of CRuby's GC              Powered by Rabbit 0.9.3
最近はマルチコアが
     当たり前の世界
Recently, PC has multi-core processer
1人でやるのは
もう辛い
I'm alone, So hard.



                      http://www.flickr.com/photos/hortont/2698261070/
他のコアが遊んでしまう問題
       ✓ GVLがあるのでCRubyは1コアで
         のみ動作。
       ✓ かといってGCもそうする必要はな
         い。
       ✓ コアが余っているなら使おうじゃな
         いか。
                                                     33/169
CRubyGCの並列世界 - Parallel world of CRuby's GC   Powered by Rabbit 0.9.3
どう解決するか?
  How fix?
並列マーキング
Parallel marking
並列マーキング


       ✓ マークを並列に行う
       ✓ ネイティブスレッドを利用


                                                     36/169
CRubyGCの並列世界 - Parallel world of CRuby's GC   Powered by Rabbit 0.9.3
並列マーキング

       ✓ 4コアマシンくらいだと嬉しいだろ
         う
       ✓ Stop the worldは変わらない
               ✓ スループット向上を狙った改善


                                                     37/169
CRubyGCの並列世界 - Parallel world of CRuby's GC   Powered by Rabbit 0.9.3
並列マーキングのフロー




                                                     38/169
CRubyGCの並列世界 - Parallel world of CRuby's GC   Powered by Rabbit 0.9.3
スイープは並列にしない?

       ✓ マークに比べてスイープはそれほ
         ど遅くない
               ✓ 笹田さんの調査

       ✓ マークを改善すればGC全体の速
         度が向上するはず

                                                     39/169
CRubyGCの並列世界 - Parallel world of CRuby's GC   Powered by Rabbit 0.9.3
どのように実装するか?
検討すべき2つのこと


       ✓ 仕事の分配
       ✓ Lock-free


                                                     41/169
CRubyGCの並列世界 - Parallel world of CRuby's GC   Powered by Rabbit 0.9.3
仕事の分配
シンプルな
並列マーキングの
実装を検討すると…
1スレッドでルートの1つの枝
    をマークする
どういうことか?
問題なさそうに
  見える
が、実は
仕事量の問題
  がある
パレートの法則
パレートの法則

                           全体の数値の大部分
                           は、全体を構成するうち
                           の一部の要素が生み出
                           しているという説。
                                       [cited from `パレートの法則 - Wikipedia']


                                                                           51/169
CRubyGCの並列世界 - Parallel world of CRuby's GC                         Powered by Rabbit 0.9.3
枝の大きさがわからない




                                                     53/169
CRubyGCの並列世界 - Parallel world of CRuby's GC   Powered by Rabbit 0.9.3
A,Bさんは早く仕事が終わって
         しまうかもしれない




                                                     54/169
CRubyGCの並列世界 - Parallel world of CRuby's GC   Powered by Rabbit 0.9.3
そうするとサボる




                                                     55/169
CRubyGCの並列世界 - Parallel world of CRuby's GC   Powered by Rabbit 0.9.3
「人間はサボってもよいが、
  機械がサボるのは
    まずい」
どうする?
http://www.flickr.com/photos/ryanr/157458385/
先ほどの例に適用
A,Bさんは早く仕事が終わって
            しまう




                                                     60/169
CRubyGCの並列世界 - Parallel world of CRuby's GC   Powered by Rabbit 0.9.3
これを
Task Stealing
   と呼ぶ
検討すべき2つのこと


       ✓ 仕事の分配
       ✓ Lock-free


                                                     63/169
CRubyGCの並列世界 - Parallel world of CRuby's GC   Powered by Rabbit 0.9.3
Lock-free
Lock-freeの定義


       ✓ ブロッキングしない
       ✓ 進行保証がある


                                                     65/169
CRubyGCの並列世界 - Parallel world of CRuby's GC   Powered by Rabbit 0.9.3
なぜLock-freeが大事なの
        か?
アムダールの法則
アムダールの法則

                           システムの一部を改良
                           したときに全体として期
                           待できる性能向上の程
                           度を知るための法則
                                 [cited from `アムダールの法則 - Wikipedia']


                                                                      68/169
CRubyGCの並列世界 - Parallel world of CRuby's GC                    Powered by Rabbit 0.9.3
並列化への適用(式)



              性能向上 P = 1 / (F + (1 - F) / N)

              F: 並列化できない部分の割合(逐次処理割合), N:コア数




                                                      69/169
CRubyGCの並列世界 - Parallel world of CRuby's GC    Powered by Rabbit 0.9.3
逐次処理割合が10%の
                           場合、どれだけコアを積
                           んでも10倍にしかならな
                           い。
                                 [cited from `アムダールの法則 - Wikipedia']


                                                                      71/169
CRubyGCの並列世界 - Parallel world of CRuby's GC                    Powered by Rabbit 0.9.3
「10%くらいなら
いいだろう」が全然ダメ
 直感よりも悪い。
そのため


       ✓ 並列化ではなるべく逐次処理を減
         らすのが重要
       ✓ Lock-freeなアルゴリズムでいこう!


                                                            73/169
CRubyGCの並列世界 - Parallel world of CRuby's GC          Powered by Rabbit 0.9.3
ここからは実装の話
TaskStealing
TaskStealing


       ✓ 他スレッドの仕事を盗む
       ✓ Arora's Task Stealing Dequeを利
         用する


                                                           76/169
CRubyGCの並列世界 - Parallel world of CRuby's GC         Powered by Rabbit 0.9.3
The deque


       ✓ double-ended queue とは違う
       ✓ bottom と top を持つデータ構造


                                                             77/169
CRubyGCの並列世界 - Parallel world of CRuby's GC           Powered by Rabbit 0.9.3
The deque




        age は 1 word                                         78/169
CRubyGCの並列世界 - Parallel world of CRuby's GC           Powered by Rabbit 0.9.3
dequeは3つの操作しかない
   Only three operation
pop_bottom




        deq末尾の要素をpop
                                                           80/169
CRubyGCの並列世界 - Parallel world of CRuby's GC         Powered by Rabbit 0.9.3
push_bottom




        deq末尾に要素をpush
                                                          81/169
CRubyGCの並列世界 - Parallel world of CRuby's GC        Powered by Rabbit 0.9.3
pop_top




        deq先頭の要素をpop
                                                               82/169
CRubyGCの並列世界 - Parallel world of CRuby's GC             Powered by Rabbit 0.9.3
Workerごとにdequeを持つ
                     Each worker has the deque




                                                        83/169
CRubyGCの並列世界 - Parallel world of CRuby's GC      Powered by Rabbit 0.9.3
Worker は pop_bottom()
              push_bottom() だけ使う




                                                     84/169
CRubyGCの並列世界 - Parallel world of CRuby's GC   Powered by Rabbit 0.9.3
pop_topはstealに利用
                                   pop_top() as steal




                                                               85/169
CRubyGCの並列世界 - Parallel world of CRuby's GC             Powered by Rabbit 0.9.3
競合問題
Contention problem
様々な競合問題がありそう


       ✓ 複数のスレッドがpop_top()を呼ぶ
       ✓ pop_top()とpop_bottom()が同時
         に呼び出される


                                                     87/169
CRubyGCの並列世界 - Parallel world of CRuby's GC   Powered by Rabbit 0.9.3
2個以上では競合なし




        同時に呼び出されても問題ない。
                                                     88/169
CRubyGCの並列世界 - Parallel world of CRuby's GC   Powered by Rabbit 0.9.3
1個では競合する




        同時に呼び出されると競合。
                                                     89/169
CRubyGCの並列世界 - Parallel world of CRuby's GC   Powered by Rabbit 0.9.3
補足(裏を返せば)

       ✓ deqの要素が2個以上の場合、
         pop_bottom()は競合しない。
       ✓ 一方、pop_top()はdeqの要素が2
         個以上の場合でも競合する。
               ✓ 複数スレッドから呼ばれるから。

                                                     90/169
CRubyGCの並列世界 - Parallel world of CRuby's GC   Powered by Rabbit 0.9.3
どのように解決しているか?
pop_top/bottomのコードを
      読めばわかる
pop_top()の擬似コード
pop_bottom()の
  擬似コード
deqの要素が1個の場合の
                 pop_bottom

       ✓ bottom,age.topがリセット
       ✓ age.tag+=1される
               ✓ age.tagはリセットの世代


                                                   105/169
CRubyGCの並列世界 - Parallel world of CRuby's GC   Powered by Rabbit 0.9.3
どのように競合が防げる
     か?
複数スレッドのpop_top()同
   時呼び出し
pop_top/bottom同時呼び
         出し
pop_top/bottom同時呼び出し

       ✓ age.top,age.tagのいずれかが書き
         換わる
       ✓ どちらもCASによって書き換えを
         検知可能
               ✓ 逐次化される

                                                   110/169
CRubyGCの並列世界 - Parallel world of CRuby's GC   Powered by Rabbit 0.9.3
pop_topの
途中でサスペンド
ageが1ワードなのが肝
       ✓ top,tagの書き込み・読み出しが
         atomic
               ✓ ※半端な状態にならない

       ✓ pop_top/bottom()によってtop/tag
         が書き換わる
               ✓ CAS命令によって逐次化
                                                   116/169
CRubyGCの並列世界 - Parallel world of CRuby's GC   Powered by Rabbit 0.9.3
The dequeまとめ
       ✓ TaskStealing用のシンプルなデー
         タ構造
       ✓ 逐次化のためageが1ワード
       ✓ CAS命令しか使わないためlock-
         free
               ✓ もっと詳しく知りたい人はこちら
                                                   117/169
CRubyGCの並列世界 - Parallel world of CRuby's GC   Powered by Rabbit 0.9.3
並列マーキングへの適用
どのようにマーキングに適
    用するか?
Aをマーク後、Aをpush_bottom




                                                   121/169
CRubyGCの並列世界 - Parallel world of CRuby's GC   Powered by Rabbit 0.9.3
Aをpop_bottom、B・Cマーク、
          B・Cをpush_bottom




                                                   122/169
CRubyGCの並列世界 - Parallel world of CRuby's GC   Powered by Rabbit 0.9.3
Cをpop_bottom、Dマーク、Dを
           push_bottom




                                                   123/169
CRubyGCの並列世界 - Parallel world of CRuby's GC   Powered by Rabbit 0.9.3
Dをpop_bottom、Bを
                         pop_bottom




                                                   124/169
CRubyGCの並列世界 - Parallel world of CRuby's GC   Powered by Rabbit 0.9.3
簡単まとめ
       ✓ deqにはマーク済みのオブジェクト
         が入る
       ✓ pop_bottomしたオブジェクトの子
         をマーク、さらにpush_bottom
       ✓ すでにマーク済みの子はdeqに入
         らない
                                                       125/169
CRubyGCの並列世界 - Parallel world of CRuby's GC       Powered by Rabbit 0.9.3
Steal
B・Cを持つworker 1と、空の
              worker2




                                                   127/169
CRubyGCの並列世界 - Parallel world of CRuby's GC   Powered by Rabbit 0.9.3
Worker2がBをpop_top




                                                   128/169
CRubyGCの並列世界 - Parallel world of CRuby's GC   Powered by Rabbit 0.9.3
あとは同じ...
並列マークの全体の処理の
     流れ
さまざまなルート




                                                   131/169
CRubyGCの並列世界 - Parallel world of CRuby's GC   Powered by Rabbit 0.9.3
それぞれをタスクとする




                                                   132/169
CRubyGCの並列世界 - Parallel world of CRuby's GC   Powered by Rabbit 0.9.3
workerはタスクを取得




        ※ロックが必要
                                                   133/169
CRubyGCの並列世界 - Parallel world of CRuby's GC   Powered by Rabbit 0.9.3
dequeを使ってマークしていく




                                                   134/169
CRubyGCの並列世界 - Parallel world of CRuby's GC   Powered by Rabbit 0.9.3
1つのタスクが終われば次を取
            得




                                                   135/169
CRubyGCの並列世界 - Parallel world of CRuby's GC   Powered by Rabbit 0.9.3
タスクがなくなればsteal




                                                   136/169
CRubyGCの並列世界 - Parallel world of CRuby's GC   Powered by Rabbit 0.9.3
小まとめ

       ✓ ルートを大きな粒度で分割(タス
         ク)
       ✓ それぞれのスレッドはタスクをこな
         す
       ✓ タスクが無くなれば盗む

                                                          137/169
CRubyGCの並列世界 - Parallel world of CRuby's GC          Powered by Rabbit 0.9.3
並列マーキングできた!
 めでたし、めでたし。
では、終わらなかった。
問題
通常のGCより遅くなってし
     まった
原因


       ✓ 原因: pop_bottom()などの処理の
         コスト



                                                        142/169
CRubyGCの並列世界 - Parallel world of CRuby's GC        Powered by Rabbit 0.9.3
pop_bottomなどの処理コスト

       ✓ pop/push_bottom(),pop_top()のコ
         ストが意外に高い
               ✓ pop_bottom(),pop_top()は特にCAS命
                 令を使う

       ✓ 並列化しても補えないくらいのコ
         スト
                                                   143/169
CRubyGCの並列世界 - Parallel world of CRuby's GC   Powered by Rabbit 0.9.3
どうする?
deqの要素 = 固定長スタック




        ローカルマークスタック(LMS)と呼ぶ
                                                   145/169
CRubyGCの並列世界 - Parallel world of CRuby's GC   Powered by Rabbit 0.9.3
マークのやり方は変わらない




                                                   146/169
CRubyGCの並列世界 - Parallel world of CRuby's GC   Powered by Rabbit 0.9.3
LMSがいっぱいになるとdeqに
         push_bottom




                                                   147/169
CRubyGCの並列世界 - Parallel world of CRuby's GC   Powered by Rabbit 0.9.3
stealもLMS単位になる
メリット


       ✓ pop/push_bottom(),pop_top()をな
         るべく呼ばなくてすむ
       ✓ 一つ一つのマーク処理が早い


                                                          149/169
CRubyGCの並列世界 - Parallel world of CRuby's GC          Powered by Rabbit 0.9.3
デメリット


       ✓ マークの並列稼働率が落ちる
               ✓ LMS単位で分配するため




                                                           150/169
CRubyGCの並列世界 - Parallel world of CRuby's GC           Powered by Rabbit 0.9.3
感謝


       ✓ 中村実(@nminoru_jp)さんに教え
         てもらった
       ✓ 感謝感謝!!


                                                        151/169
CRubyGCの並列世界 - Parallel world of CRuby's GC        Powered by Rabbit 0.9.3
その他工夫

       ✓ tagのオーバフロー対策
       ✓ deqが丸い配列(ring buffer)
       ✓ Arrayのマークの並列性を高める
       ✓ 時間もないので省略

                                                     152/169
CRubyGCの並列世界 - Parallel world of CRuby's GC     Powered by Rabbit 0.9.3
小まとめ
       ✓ 純粋なアルゴリズム適用だと遅く
         なった
       ✓ deqの要素を粗くする(固定長の
         配列にする)ことで改善
       ✓ 要素が粗いため並列性は若干落
         ちる
                                                          153/169
CRubyGCの並列世界 - Parallel world of CRuby's GC          Powered by Rabbit 0.9.3
性能評価
実行環境

       ✓ CPU: Intel(R) Core(TM)
         i7-2620M CPU @ 2.70GHz
               ✓ 2 core, 4 thread

       ✓ Memory: 8GB
       ✓ OS: Linux
                                                          155/169
CRubyGCの並列世界 - Parallel world of CRuby's GC          Powered by Rabbit 0.9.3
ベンチマークプログラム

       ✓ bm_gc_depth_objects.rb
               ✓ 幅広・深めのオブジェクト構造を生成

       ✓ make benchmark
               ✓ CRuby添付のベンチマークプログラム
                 群

                                                   156/169
CRubyGCの並列世界 - Parallel world of CRuby's GC   Powered by Rabbit 0.9.3
考察
       ✓ bm_gc_depth_objects.rb
               ✓ 30%程総GC実行時間が改善
               ✓ もっと多いコアだともっと改善されそう

       ✓ make benchmarkは遅くなる
               ✓ dequeの準備があるから起動が若干遅
                 い
                                                        159/169
CRubyGCの並列世界 - Parallel world of CRuby's GC        Powered by Rabbit 0.9.3
どういうアプリだと嬉しいか?

       ✓ マークするオブジェクトが大量に
         あり続けるもの
               ✓ サーバ側アプリケーション(?)
                    ✓ 大体forkしてるからなぁ…

               ✓ MVMなどが進化してくるとありがたみ
                 が増すかもしれない

                                                   160/169
CRubyGCの並列世界 - Parallel world of CRuby's GC   Powered by Rabbit 0.9.3
問題点
メモリ使用量が増えた

       ✓ dequeの確保等々
       ✓ 一つのdequeに大体1MBくらい使
         う
       ✓ => コアを沢山積んでいるサーバ
         マシンなら別に問題ないか?

                                                   162/169
CRubyGCの並列世界 - Parallel world of CRuby's GC   Powered by Rabbit 0.9.3
SEGV

       ✓ ちょっとバグを取りきれてない
       ✓ 4コアマシンだとSEGVするんだ
         が…
       ✓ 取らないと…

                                                          163/169
CRubyGCの並列世界 - Parallel world of CRuby's GC          Powered by Rabbit 0.9.3
テスト環境がないです問題

       ✓ 沢山のコアを積んだマシンないで
         す
       ✓ 8コア以上欲しいなぁ
       ✓ 誰か持ってたらアカウント下さい :)

                                                   164/169
CRubyGCの並列世界 - Parallel world of CRuby's GC   Powered by Rabbit 0.9.3
Windowsではまだ動かない


       ✓ workerはpthreadで動かしている
       ✓ gccの組み込み関数を使っている
               ✓ Windows対応可能


                                                   165/169
CRubyGCの並列世界 - Parallel world of CRuby's GC   Powered by Rabbit 0.9.3
まとめ
まとめ
       ✓ CRuby用の並列GCを作った
       ✓ GCブームが来ている
               ✓ GC少女まどか☆マギカ

       ✓ 手持ちのマシンだとそれなりに性
         能改善するようである
       ✓ 問題点はまだある
                                                         167/169
CRubyGCの並列世界 - Parallel world of CRuby's GC         Powered by Rabbit 0.9.3
余談

       ✓ 毎年RubyKaigiにあわせてGCを
         作ってきた
       ✓ 今年でRubyKaigiが終わるので、
         CRubyのGCハックも一旦終わり
       ✓ 先生の次回作に期待
                                                        168/169
CRubyGCの並列世界 - Parallel world of CRuby's GC        Powered by Rabbit 0.9.3
ご静聴
ありがとうございました。

Más contenido relacionado

Destacado

G1GCへ伸びていた「いばらの道」
G1GCへ伸びていた「いばらの道」G1GCへ伸びていた「いばらの道」
G1GCへ伸びていた「いばらの道」Narihiro Nakamura
 
Javaのプログラムはどうやって動いているの? GC編
Javaのプログラムはどうやって動いているの? GC編Javaのプログラムはどうやって動いているの? GC編
Javaのプログラムはどうやって動いているの? GC編Yuichi Sakuraba
 
Parallel worlds of CRuby's GC
Parallel worlds of CRuby's GCParallel worlds of CRuby's GC
Parallel worlds of CRuby's GCNarihiro Nakamura
 
Java hotspot vmに おけるGCの振る舞い
Java hotspot vmにおけるGCの振る舞いJava hotspot vmにおけるGCの振る舞い
Java hotspot vmに おけるGCの振る舞いDi Ai
 
円環の理(Garbage Collection)
円環の理(Garbage Collection)円環の理(Garbage Collection)
円環の理(Garbage Collection)Narihiro Nakamura
 
第九回渋谷Java RaspberryPi+Javaを試してみる
第九回渋谷Java RaspberryPi+Javaを試してみる第九回渋谷Java RaspberryPi+Javaを試してみる
第九回渋谷Java RaspberryPi+Javaを試してみるchonaso
 
われわれは、GCをX倍遅くできる
われわれは、GCをX倍遅くできるわれわれは、GCをX倍遅くできる
われわれは、GCをX倍遅くできるNarihiro Nakamura
 
第七回 渋谷Java - Apache Shiroを使ってみた
第七回 渋谷Java - Apache Shiroを使ってみた第七回 渋谷Java - Apache Shiroを使ってみた
第七回 渋谷Java - Apache Shiroを使ってみたchonaso
 
GC本をGCしないための100の方法
GC本をGCしないための100の方法GC本をGCしないための100の方法
GC本をGCしないための100の方法Narihiro Nakamura
 
第六回渋谷Java Java8のJVM監視を考える
第六回渋谷Java Java8のJVM監視を考える第六回渋谷Java Java8のJVM監視を考える
第六回渋谷Java Java8のJVM監視を考えるchonaso
 

Destacado (17)

Fxxking gc.c
Fxxking gc.cFxxking gc.c
Fxxking gc.c
 
G1GCへ伸びていた「いばらの道」
G1GCへ伸びていた「いばらの道」G1GCへ伸びていた「いばらの道」
G1GCへ伸びていた「いばらの道」
 
GC FAQ
GC FAQGC FAQ
GC FAQ
 
Ruby's GC 20
Ruby's GC 20Ruby's GC 20
Ruby's GC 20
 
Javaのプログラムはどうやって動いているの? GC編
Javaのプログラムはどうやって動いているの? GC編Javaのプログラムはどうやって動いているの? GC編
Javaのプログラムはどうやって動いているの? GC編
 
Parallel worlds of CRuby's GC
Parallel worlds of CRuby's GCParallel worlds of CRuby's GC
Parallel worlds of CRuby's GC
 
Java hotspot vmに おけるGCの振る舞い
Java hotspot vmにおけるGCの振る舞いJava hotspot vmにおけるGCの振る舞い
Java hotspot vmに おけるGCの振る舞い
 
円環の理(Garbage Collection)
円環の理(Garbage Collection)円環の理(Garbage Collection)
円環の理(Garbage Collection)
 
第九回渋谷Java RaspberryPi+Javaを試してみる
第九回渋谷Java RaspberryPi+Javaを試してみる第九回渋谷Java RaspberryPi+Javaを試してみる
第九回渋谷Java RaspberryPi+Javaを試してみる
 
われわれは、GCをX倍遅くできる
われわれは、GCをX倍遅くできるわれわれは、GCをX倍遅くできる
われわれは、GCをX倍遅くできる
 
第七回 渋谷Java - Apache Shiroを使ってみた
第七回 渋谷Java - Apache Shiroを使ってみた第七回 渋谷Java - Apache Shiroを使ってみた
第七回 渋谷Java - Apache Shiroを使ってみた
 
Symbol GC
Symbol GCSymbol GC
Symbol GC
 
GC本をGCしないための100の方法
GC本をGCしないための100の方法GC本をGCしないための100の方法
GC本をGCしないための100の方法
 
RUBYLAND
RUBYLANDRUBYLAND
RUBYLAND
 
GCが止まらない
GCが止まらないGCが止まらない
GCが止まらない
 
第六回渋谷Java Java8のJVM監視を考える
第六回渋谷Java Java8のJVM監視を考える第六回渋谷Java Java8のJVM監視を考える
第六回渋谷Java Java8のJVM監視を考える
 
Java8勉強会
Java8勉強会Java8勉強会
Java8勉強会
 

Más 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
 
本当は怖い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
 

Más de Narihiro Nakamura (13)

桐島、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周年を祝って
 
シャイな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社内勉強会
 
絶対復習について
絶対復習について絶対復習について
絶対復習について
 
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はゲームの夢を見るか
 

Último

論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNetToru Tamaki
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)Hiroki Ichikura
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdftaisei2219
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Yuma Ohgami
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A surveyToru Tamaki
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...Toru Tamaki
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものですiPride Co., Ltd.
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略Ryo Sasaki
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムsugiuralab
 

Último (9)

論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdf
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものです
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
 

CRubyGCの並列世界