K.Sasada's Home Page

こめんとのついか

こめんとこめんと!

message

please add long comment :).

_7(Sat)

■Ruby 2.1 internal advent calendar 7 日目

さて、7 日目は ObjectSpace.reachable_objects_from_root メソッドです。

Ruby 2.0 から、ObjectSpace.reachable_objects_from(obj) というメソッドが導入されました。これは、obj から参照されるオブジェクトの一覧配列を返します。

Ruby 2.1 から導入された ObjectSpace.reachable_objects_from_root メソッドは、GC 時に「ルート」と言われる、マークの起点となるオブジェクトの集合を返します。

require 'pp'
require 'objspace'

pp ObjectSpace.reachable_objects_from_root
#=> ... 3000 行くらいの出力

これで何が出来るかというと、ObjectSpace.reachable_objects_from_root と ObjectSpace.reachable_objects_from を組み合わせることで、GC のまねごとみたいなことが出来ます。

_maeda(Mon Dec 16 21:22:08 +0900 2013)

 reachableという名前ということは、「直接に参照されてる」だけでなく「いくつもポインタを経由して到達できるものすべて」を返すんですか?

_ささだ(Tue Dec 17 01:31:18 +0900 2013)

 indirection は含みません。ObjectSpace.reachable_objects_from(obj) は、obj から direct に辿ることができるオブジェクトの集合を返すので、これを利用することですべて辿ることが出来ます。しかし、確かに reachable だけだと、indirect 入りそうですね...。

_maeda(Tue Dec 17 13:17:50 +0900 2013)

確かに reachable だけだと、indirect 入りそうですね...。

そうですね.

かと言って,directly_reachable_objects_from(obj) だと長いですねえ.objects_referenced_from(obj) とかがいいんじゃないかなあ.または, objects_pointed_to_by(obj),referents(obj), descendant(obj), offspring(obj) とか…

あと,reachable_objects_from_root も間接参照を含むように読めちゃう.こっちはroot_objects がいいんじゃないかなあ.

_ささだ(Thu Dec 19 18:50:29 +0900 2013)

 その辺の用語は 2.0 で導入しちゃったんですよね...。


好きなだけ長いコメントをどうぞ。

お名前


back

tton 記述が使えます。YukiWikiな記述してりゃ問題ありません。

「行頭に#code」 と、「行頭に#end」 で挟むと、その間の行は pre で囲まれます。プログラムのソースを書くときに使ってください。

例:

#code

(なんかプログラム書く)

#end

リンクは

[[なまえ|http://www.example.org]]

とか

[[http://www.example.org]]

で貼れます。

$Date: 2003/04/28 10:27:51 $