Programmierung in Ruby

Der Leitfaden der Pragmatischen Programmierer

module ObjectSpace

Index:

_id2ref define_finalizer each_object garbage_collect undefine_finalizer


Das ObjectSpace-Modul enthält eine Anzahl von Routinen, die mit der Garbage-Collection zusammenarbeiten und mit denen man mit einem Iterator über alle lebenden Objekte iterieren kann.

ObjectSpace liefert auch die Möglichkeit der Objekt-Entfernung, Prozeduren, mit denen man ein spezielles Objekt dem Garbage-Collektor zur Zerstörung übergeben kann.

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}" })
erzeugt:
0x4018d4f0
n finals=>1
Finalizer three on 537684600
0x4018d504
n finals=>0
Finalizer one on 537684610
n finals=>0
Finalizer two on 537684610

class methods
_id2ref ObjectSpace._id2ref( anId ) -> anObject

Konvertiert eine Objekt-Id in eine Referenz auf dieses Objekt. Darf nicht aufgerufen werden für eine Objekt-Id, die als Parameter an einen Finalizer übergeben wurde.

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() )

Fügt aProc als Finalizer hinzu, d.h. es wird aufgerufen, wenn die Zerstörung von anObject ansteht.

each_object ObjectSpace.each_object( [aClassOrMod] ) {| anObj | block }-> aFixnum

Ruft den Block auf für jedes lebende nicht immediate Objekt in diesem Ruby-Prozess. (Immediate sind direkte Objekte wie kleine Zahlen oder Strings.) Falls aClassOrMod angegeben ist, wird der Block nur für die Klassen oder Module aufgerufen, die aClassOrMod entsprechen (oder davon eine Unterklasse sind). Liefert die Anzahl der gefundenen Objekte zurück.

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

garbage_collect ObjectSpace.garbage_collect -> nil

Initialisiert die Garbage-Collection (siehe Modul GC auf Seite 414).

undefine_finalizer ObjectSpace.undefine_finalizer( anObject )

Entfernt alle Finalizers für anObject.


Extracted from the book "Programming Ruby - The Pragmatic Programmer's Guide"
Übersetzung: Jürgen Katins
Für das englische Original:
© 2000 Addison Wesley Longman, Inc. Released under the terms of the Open Publication License V1.0. That reference is available for download.
Diese Lizenz sowie das Original vom Herbst 2001 bilden die Grundlage der Übersetzung
Es wird darauf hingewiesen, dass sich die Lizenz des englischen Originals inzwischen geändert hat.
Für die deutsche Übersetzung:
© 2002 Jürgen Katins
Der Copyright-Eigner stellt folgende Lizenzen zur Verfügung:
Nicht-freie Lizenz:
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.
Freie Lizenz:
Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.1 or any later version published by the Free Software Foundation; with no Invariant Sections, with no Front-Cover Texts, and with no Back-Cover Texts. A copy of the license is included in the section entitled "GNU Free Documentation License".