Google

module ObjectSpace

Index:

_id2ref define_finalizer each_object garbage_collect undefine_finalizer


The ObjectSpace module contains a number of routines that interact with the garbage collection facility and allow you to traverse all living objects with an iterator.

ObjectSpace also provides support for object finalizers, procs that will be called when a specific object is about to be destroyed by garbage collection.

include ObjectSpace

a = "A"
b = "B"
c = "C"

define_finalizer(a, proc {|id| puts "Finalizer one on #{id}" })
define_finalizer(a, proc {|id| puts "Finalizer two on #{id}" })
define_finalizer(b, proc {|id| puts "Finalizer three on #{id}" })

produces:

Finalizer three on 537684760
Finalizer one on 537684770
Finalizer two on 537684770

class methods
_id2ref ObjectSpace._id2ref( anId ) -> anObject
Converts an object id to a reference to the object. May not be called on an object id passed as a parameter to a finalizer.

s = "I am a string" -> "I am a string"
r = ObjectSpace._id2ref(s.id) -> "I am a string"
r == s -> true

define_finalizer ObjectSpace.define_finalizer( anObject, aProc=proc() )
Adds aProc as a finalizer, to be called when anObject is about to be destroyed.
each_object ObjectSpace.each_object( [ aClassOrMod] ) {| anObj | block } -> aFixnum
Calls the block once for each living, nonimmediate object in this Ruby process. If aClassOrMod is specified, calls the block for only those classes or modules that match (or are a subclass of) aClassOrMod. Returns the number of objects found.

a = 102.7
b = 95
ObjectSpace.each_object(Numeric) {|x| p x }
print "Total count: ", ObjectSpace.each_object {} ,"\n"

produces:

102.7
2.718281828
3.141592654
Total count: 376

garbage_collect ObjectSpace.garbage_collect -> nil
Initiates garbage collection (see module GC on page 414).
undefine_finalizer ObjectSpace.undefine_finalizer( anObject )
Removes all finalizers for anObject.


Extracted from the book "Programming Ruby - The Pragmatic Programmer's Guide"
Copyright © 2000 Addison Wesley Longman, Inc. Released under the terms of the Open Publication License V1.0.
This reference is available for download.