タグ

objectspaceとqiitaに関するnabinnoのブックマーク (2)

  • RubyのGCと仲良くしたい〜WeakRefオブジェクトを削除するぞ編〜 - Qiita

    Rubyでは、作成したオブジェクトがなにかのタイミングでGCによってメモリから解放されています。 一般的なオブジェクトは、どこからかに参照されている間は必要、参照されていないなら不要とGCに判断され、メモリから解放されます。 例外的に 弱い参照 -Wikipedia として定義されたオブジェクトは、まだ参照されていてもなにかのタイミングでGCにぽいぽいされてしまいます。 一見、使いようが無いようですが、生成コストがかかる値をキャッシュしておき、メモリに余裕がない場合(一般にGCが動くタイミング)にキャッシュを破棄する、というようなことができます。 機能の実現に必要となることはありませんが、速度改善などに役立つテクニック的な。 なおタイトルはてきとーです。「○○編」と書いていますが、別の編があったりはしません。たぶん。 Ruby2.1で動作検証をしましたが、1.9以降ならたぶん大丈夫なんじゃ

    RubyのGCと仲良くしたい〜WeakRefオブジェクトを削除するぞ編〜 - Qiita
  • Ruby でラインメモリプロファイラ - Qiita

    プロファイラ好きなモニタの前の皆さんこんにちは。@sonots です。この記事では、Ruby コードのどの行がどのぐらいメモリを消費しているか調べる方法を紹介します。 オブジェクトの数を数える Ruby には ObjectSpace というオブジェクトの情報を集めたり操作したりする module があります。 このモジュールの each_object メソッドを使用すると、RubyVM 上の全てのオブジェクトを取り出すことができます。 このメソッドを使って、以下のようなコードを書くと、実行した地点で、RubyVM 中にどのクラスのオブジェクトが何個存在しているのかカウントできたりするわけです。興味深いですね! ObjectSpace.each_object.inject(Hash.new 0) {|h,o| h[o.class]+=1; h } # => {Class=>241, Stri

    Ruby でラインメモリプロファイラ - Qiita
  • 1