memoryとGCに関するtyruのブックマーク (3)
-
9 Generational GC (中略) さて、Schemeにおいて、ユーザプログラムがconsやvectorのみを用いる限り、旧→新のポインタは決して生まれない。 Set-car!などの破壊的代入を行なって初めて生じるものである。コンパイラが、破壊的代入の際に必ずGCに知らせる(書き換えられるオブジェクトをGCに教える)ようにすれば、GCが旧→新のポインタ全てを手早く見つけることができる。このように、メモリオブジェクトへの書き込みの際に特別な処理を行なう機構をwrite barrierという︵注︶。 (中略) 10 Incremental GC (中略) Generational GCと同様に、write barrierが必要になる (ここではmark and sweepを仮定する)。Write barrierがないと破綻する例を図8に示す。マークフェイズの途中でaが黒になった時
-
-
RubyAdventJP, GC, Ruby︵この記事はRuby Advent Calendar jp: 2009 : ATNDの4日目です。前日はmrknさんでした︶ 健全なるRubyistであれば、RubyのGCをいじることが週に一度はあるでしょう。そのときに困るのが、GCをいじってしまったことによるバグの修正です。GCをいじるというのは想像以上に難しく、少しでも書き間違えるとメモリ破壊が発生します。そのときに使えるTipsをこの記事で書くことにします。 みなさんご存じの通り、メモリ破壊というのは原因を特定するのが困難です。これは問題が発覚する場所とメモリ破壊が起こった現場が位置的に遠いことに起因しています。偉大なるハッカーのまつもとさんですら、その発見は困難です。 [ruby-dev:38628] Re: [BUG: trunk] called on terminated objec
-
1