--- ObjectSpace.define_finalizer(obj, proc)
--- ObjectSpace.define_finalizer(obj) {|id| ...}

    obj Ȥ˼¹Ԥեʥ饤 proc 
    ϿޤƱ֥ȤˤĤʣƤФ줿Ȥ֤
    ϤʤɲϿޤ

    proc ˤϡեʥ饤Ȥ Proc ֥Ȥ
    ޤ֥åꤷϡΥ֥å proc ˤʤ
    ޤ(Ҥ꤬Τǥ֥åǥեʥ饤Ͽ
    Τ񤷤Ǥ)

    եʥ饤 proc ˤϰȤ obj  
    ID(Object#id [Object/id]) Ϥޤ

    ʲϡdefine_finalizer λȤΰǤ

        class Foo
          def initialize
            ObjectSpace.define_finalizer(self) {
              puts "foo"
            }
          end
        end
        Foo.new
        GC.start

    ϡϤ줿 proc  self  obj 򻲾Ȥ
    Ť뤿ᡣΥ֥Ȥ GC оݤˤʤޤ

    tempfile.rb ϡեʥ饤λȤ
    ɤˤʤäƤޤϡ饹ΥƥȤ Proc 
    뤳ȤǾ嵭򤷤Ƥޤ

        class Bar
          def Bar.callback
            proc {
              puts "bar"
            }
          end
          def initialize
            ObjectSpace.define_finalizer(self, Bar.callback)
          end
        end
        Bar.new
        GC.start

    proc θƤӽФȯæ(exit㳰)̵뤵ޤ
    ϡץȤΥᥤ GC ȯˤäƱǤ
    ΤɤǤ԰¤ʤ -d ץ
    㳰ȯ̵ͭǧƤɤǤ礦

        class Baz
          def initialize
            ObjectSpace.define_finalizer self, eval %q{
              proc {
                raise "baz" rescue puts $!
                raise "baz2"
                puts "baz3"
              }
            }, TOPLEVEL_BINDING
          end
        end
        Baz.new
        GC.start

        # => baz

