Programming Ruby
The Pragmatic Programmer's Guide
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 537767360
Finalizer one on 537767510
Finalizer two on 537767510
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
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: 372
Initiates garbage collection (see module
GC on page 410).
Removes all finalizers for
anObject.
Extracted from the book "Programming Ruby -
The Pragmatic Programmer's Guide"
Copyright
©
2001 by Addison Wesley Longman, Inc. This material may
be distributed only subject to the terms and conditions set forth in
the Open Publication License, v1.0 or later (the latest version is
presently available at
http://www.opencontent.org/openpub/)).
Distribution of substantively modified versions of this document is
prohibited without the explicit permission of the copyright holder.
Distribution of the work or derivative of the work in any standard
(paper) book form is prohibited unless prior permission is obtained
from the copyright holder.