"Jens Puruckherr" jpuruckherr@cyberport.de writes:
wenn ein Objekt andere Objekte (also nicht nur Referenzen, sondern echt wie geschachtelte Hashes), werden diese Objekte dann auch zerstört wenn das Master-Objekt zerstört (undef) wird?
my $a = new A; my $b = new B;
$a->b($b); undef $a;
$b ist immer noch da, oder?
$b ist solange noch da, wie es noch irgendwo bekannt ist. Wenn niemand mehr $b kennt, außer $a, dann wird es mit garbage collected, wenn $a verschwindet. Also halbwegs klassische Garbage-Collection.
Oder muss ich rekursiv durch $a krabbeln um alle Unterobjekte zu zerstören?
Mußt Du nicht, wenn nichts anderes mehr auf $b zeigt.
Die Applikation wird über SOAP angesprochen und wir haben den Verdacht, dass diese sich etwas merkwürdig verhält. Aller paar Tage wird innerhalb ein paar Stunden der Speicher zugekracht, bis der Kernel die Notbremse zieht.
Der Garbage-Collector könnte z.B. über Umwege wieder auf sich selbst verweisende Strukturen nicht als einen geschlossenen Ring von "Mülldaten" erkennen. Ist nicht ausgeschlossen, daß das passiert.
Ich bin nicht 100% fit in den Details, google mal nach Perl, FAQ und Garbage Collection. Hier scheint z.B. was zu stehen:
http://www.perl.com/doc/FAQs/FAQ/oldfaq-html/Q4.19.html
GreetinX Steffen