Mailinglisten-Archive |
Hi Stefan, ich schätze das Problem wird dadurch hervorgerufen, dass sich die beiden Objekte "tubu" und "bar" jeweils gegenseitig referenzieren. Im Normalfall entfernt der Garbage-Collector Objekte, die nicht mehr gebraucht werden - sprich: auf die keine Refernz mehr existiert. Da die beiden Objekte sich allerdings gegenseitig referenzieren, wird bei keinem von beiden der Referenz-Zähler jemals auf 0 fallen. Deswegen funktioniert es auch wenn du ein "clone" verwendest. Dadurch verbrauchst du zwar in einem Schleifendurchlauf mehr Speicher (für das geklonte Objekt), aber konstruierst keine Schleife durch deine Referenzen. In wie weit das so gedacht ist kann ich nicht beurteilen. Ich hätte erwartet das der Garbage-Collector Gruppen von Objekten, die nur noch sich selbst untereinander referenzieren, erkennt und aus dem Speicher entfernt. Aber wahrscheinlich ist das nicht ganz so einfach zu implementieren, wie das jetzt hier zu schreiben ;) Gruß Björn Stefan Sturm wrote: > Hallo, > > wir habe in einem größeren Projekt derzeit ein Problem mit dem > Speicherverbrauch eines Scripts. > Ich habe das Problem in einem kleineres Script reproduzieren können. > Aber vielleicht ist das ja auch ein Feature. > > Hier das Script: > > [...] > > Dieses Script frisst bei jedem Druchlauf mehr Speicher. > Wenn ich in der Function init() in Klasse bar folgende Zeile verwende > ist alles OK. > $this->list[] = new tubu(clone $this); // ein clone vor das $this. > > Hat da jemand vielleicht eine Idee? > > Danke und Grüße, > Stefan Sturm -- Björn Goetschke http://www.bjoern-goetschke.de/ http://www.jabbahome.de/
php::bar PHP Wiki - Listenarchive