Tbpgr Blog

Employee Experience Engineer tbpgr(てぃーびー) のブログ

Ruby | ObjectSpace | count_objects

概要

ObjectSpace#count_objects(result_hash = {}) -> Hash

詳細

オブジェクトを種類ごとにカウントした結果を Hash として返却。

サンプルコード
require 'tbpgr_utils'

hash = {}
bulk_puts_eval binding, <<-EOS
ObjectSpace.count_objects
class Hoge; end
ObjectSpace.count_objects
hoge1 = Hoge.new
ObjectSpace.count_objects
hoge2 = Hoge.new
ObjectSpace.count_objects
hoge3 = Hoge.new
ObjectSpace.count_objects
EOS

__END__
下記はTbpgrUtils gemの機能
bulk_puts_eval

https://rubygems.org/gems/tbpgr_utils
https://github.com/tbpgr/tbpgr_utils

出力

クラス定義後に T_CLASS が増え、(なんで2増えるんだろう?)
インスタンス生成後に T_OBJECT が増えていることが分かる

ObjectSpace.count_objects       # => {:TOTAL=>45653, :FREE=>834, :T_OBJECT=>629, :T_CLASS=>957, :T_MODULE=>69, :T_FLOAT=>4, :T_STRING=>21125, :T_REGEXP=>246, :T_ARRAY=>3604, :T_HASH=>151, :T_STRUCT=>10, :T_BIGNUM=>17, :T_FILE=>55, :T_DATA=>2469, :T_MATCH=>9, :T_COMPLEX=>1, :T_NODE=>15404, :T_ICLASS=>69}
class Hoge; end                 # => nil
ObjectSpace.count_objects       # => {:TOTAL=>46061, :FREE=>1137, :T_OBJECT=>629, :T_CLASS=>959, :T_MODULE=>69, :T_FLOAT=>4, :T_STRING=>21202, :T_REGEXP=>246, :T_ARRAY=>3611, :T_HASH=>153, :T_STRUCT=>10, :T_BIGNUM=>17, :T_FILE=>55, :T_DATA=>2474, :T_MATCH=>9, :T_COMPLEX=>1, :T_NODE=>15416, :T_ICLASS=>69}
hoge1 = Hoge.new                # =>                                                                                                                                                                                                                                                                              #<Hoge:0x00000600bf6728>
ObjectSpace.count_objects       # => {:TOTAL=>46061, :FREE=>1067, :T_OBJECT=>630, :T_CLASS=>959, :T_MODULE=>69, :T_FLOAT=>4, :T_STRING=>21252, :T_REGEXP=>246, :T_ARRAY=>3615, :T_HASH=>154, :T_STRUCT=>10, :T_BIGNUM=>17, :T_FILE=>55, :T_DATA=>2479, :T_MATCH=>9, :T_COMPLEX=>1, :T_NODE=>15425, :T_ICLASS=>69}
hoge2 = Hoge.new                # =>                                                                                                                                                                                                                                                                              #<Hoge:0x00000600bf5c38>
ObjectSpace.count_objects(hash) # => {:TOTAL=>46061, :FREE=>995, :T_OBJECT=>631, :T_CLASS=>959, :T_MODULE=>69, :T_FLOAT=>4, :T_STRING=>21302, :T_REGEXP=>246, :T_ARRAY=>3619, :T_HASH=>155, :T_STRUCT=>10, :T_BIGNUM=>17, :T_FILE=>55, :T_DATA=>2484, :T_MATCH=>9, :T_COMPLEX=>1, :T_NODE=>15436, :T_ICLASS=>69}
hoge3 = Hoge.new                # =>                                                                                                                                                                                                                                                                              #<Hoge:0x00000600bf5120>
ObjectSpace.count_objects(hash) # => {:TOTAL=>46061, :FREE=>924, :T_OBJECT=>632, :T_CLASS=>959, :T_MODULE=>69, :T_FLOAT=>4, :T_STRING=>21352, :T_REGEXP=>246, :T_ARRAY=>3623, :T_HASH=>155, :T_STRUCT=>10, :T_BIGNUM=>17, :T_FILE=>55, :T_DATA=>2489, :T_MATCH=>9, :T_COMPLEX=>1, :T_NODE=>15447, :T_ICLASS=>69}