概要
ObjectSpace
詳細
全てのオブジェクトを操作するモジュール、ObjectSpaceについて。
RailsのActiveSupportのsubclasses.rbを読んでいる最中にObjectSpaceをはじめてみた。
https://github.com/rails/rails/blob/master/activesupport/lib/active_support/core_ext/class/subclasses.rb
サンプル
# encoding: utf-8 require 'pp' require 'tbpgr_utils' class Hoge def hoge "hoge" end end class HogeChild < Hoge def hoge "#{super}_child" end end h = Hoge.new h2 = Hoge.new hc = HogeChild.new # オブジェクト解放時の処理を登録 ObjectSpace.define_finalizer(h) {puts "finalize"} # オブジェクトを種類ごとにカウントした結果を Hash として返す p ObjectSpace.count_objects # Object#kind_of?の関係にあるオブジェクト全体への操作 ObjectSpace.each_object(Hoge) do |hoge| puts hoge.hoge end
出力
{:TOTAL=>30690, :FREE=>277, :T_OBJECT=>1907, :T_CLASS=>498, :T_MODULE=>25, :T_FLOAT=>7, :T_STRING=>18451, :T_REGEXP=>78, :T_ARRAY=>4871, :T_HASH=>153, :T_STRUCT=>2, :T_BIGNUM=>9, :T_FILE=>13, :T_DATA=>1112, :T_MATCH=>34, :T_COMPLEX=>1, :T_NODE=>3227, :T_ICLASS=>25} hoge_child hoge hoge finalize