Die Programmiersprache Ruby

Blog| Forum| Wiki  

Er ist eines der Hauptelemente von Ruby: Der Garbage Collector, zu deutsch etwa »Müllsammler«. Er kümmert sich darum, dass Objekte, zu denen keine Referenz mehr existiert, entfernt werden und somit speichereffizient gearbeitet werden kann.

Inhaltsverzeichnis

Funktionsweise

Der Haupt-Ruby-Interpreter MRI verwendet einen sogenannten »Mark-and-sweep«-Ansatz. Das heißt, der Garbage Collector durchläuft hin und wieder alle momentan aktiven Objekte und markiert (engl. mark) diejenigen, zu denen eine Referenz existiert. In einer zweiten Phase, die im Anschluss an die Mark-Phase gestartet wird, entfernt er nun die nicht markierten Objekte (engl. sweep) und gibt den von ihnen belegten Speicherplatz frei.

Interaktion mit dem Garbage Collector

Von Ruby aus

Ruby bietet das Modul GC an, mit dem der Garbage Collector kontrollieren lässt. Beispielsweise lässt sich der Garbe Collector mit GC.disable ausschalten, wodurch unter Umständen eine höhere Ausführgeschwindigkeit (auf Kosten des Speicherverbrauchs) erreicht wird. Mit GC.enable schaltet man ihn wieder ein. Besondere Beachtung verdient noch die Methode GC.start, die den Start der Mark-Phase explizit anfordert. Das kann praktisch sein, nachdem man sehr viele Objekte auf einmal dereferenziert hat.

Von C aus

Im Sinne von Ruby-C-Extensions ist es gelegentlich erforderlich, mit Rubys GC zu interagieren. Erstellt man hybridartige Objekte, die zu einem Teil aus Ruby und zum anderen aus C bestehen, müssen jegliche Objekte, die von C aus referenziert werden mithilfe der Funktion rb_gc_mark markiert werden, da Ruby C-Extensions nicht selbst auf Referenzen überprüfen kann. Zudem muss für C-Strukturen eine free-Funktion bereitgestellt werden, die aufgerufen wird, wenn der Garbage Collector das Objekt entfernen möchte.