Thread $finished im Debugger setzen. um durch den Mark-and-Sweep GC zu steppen (4 answers)
Opened by xtomcatx at 2008-09-11 17:28

xtomcatx
 2008-09-11 20:49
#114547 #114547
User since
2006-08-27
31 Artikel
BenutzerIn
[default_avatar]
Ich will nicht vermessen erscheinen, aber hast Du denn tatsächlich Ahnung vom Garbage-Collector? Das soll wirklich kein dummer Spruch oder so sein, ich wäre für genauere Infos nämlich sehr dankbar. Ich habe mich schon etwas in das Thema GC unter Perl eingelesen und habe auch vom Thema Compilerbau ein wenig Ahnung.
Ich verstehe http://perldoc.perl.org/perlobj.html#Two-Phased-Garbage-Collection so, dass während der Programmlaufzeit in der Tat ein Referenzzähler verwendet wird, um zu entfernende Objekte auszumachen. Zu Programmende hin, wird dann aber sehr wohl M-a-S eingesetzt, um die übrig gebliebenen Objekte einzusammeln und zu zerstören.
Mit Referencecounting wäre es auch überhaupt nicht möglich, den gesamten Speicherplatz wieder frei zu machen, sonst würde sich niemand die Mühe machen, nen anderen GC zu implementieren, denn das RC ist ne schön schnelle Sache. Verklemmungen/Zyklen kannst Du damit aber leider nicht finden.
Ich kann nicht beschwören, dass M-a-S eingesetzt wird, aber irgendwas muss am Schluss noch passieren. Wieso sollte perlobj auch lügen?
Ich habe z.B. hier zwar gelesen, dass es Gerüchte um einen M-a-S in Perl geben soll, aber das bezieht sich wohl auf den Collector zu Laufzeit: http://perl.active-venture.com/pod/perltodo-somepo...

Ja, es gibt Destroyblöcke, die werden auch durchlaufen. Es ist aber ein Zyklus eingebaut und der wird erst in der "global destruction" beseitigt. Wenn ich eine debug-Ausgabe in diesem Block machen lasse, dann wird die auch ausgegeben, wenn ich das Programm normal laufen lasse, aber eben nicht im Debugger. Daher meine Frage.

View full thread $finished im Debugger setzen. um durch den Mark-and-Sweep GC zu steppen