Garbage Collector umgehen
Sadrak
- perl
OK, das muss doch möglich sein, das der meine Objekt in ruhe lässt :)
Achja, ich bins wieder *g*
OK, aktuelles Problem ist, das der Garbage Collektor bei Perl was löscht, was ich eigentlich noch brauche. Ich habe was gehört von Referenzen in sich verschachteln, damit das Objekt nicht löscht ... aber nach mitlerweile 1 1/2 Stunden suchzeit habe ich um diese Zeit kein Bock mehr mir noch konfusere Gedanken zu machen, was ich bei Google wohl eingeben muss, damit ENDLICH ne Seite kommt wo was brauchbares steht :) Darum nochmal hier die Frage:
Wie kann ich den GarbageCollector umgehen und vorallem WIE realisiere ich das dann? ALso bitte mit einem BSP dabei oder einem link, da ich nichts dergleichen im Inet gefunden habe.
Hallo,
nexte mal die Nachfrage bitte im selben Thread posten.
OK, das muss doch möglich sein, das der meine Objekt in ruhe lässt :)
Nein.
OK, aktuelles Problem ist, das der Garbage Collektor bei Perl was löscht, was
ich eigentlich noch brauche. Ich habe was gehört von Referenzen in sich
verschachteln, damit das Objekt nicht löscht ...
Das ist Unfug. Damit stellst du hoechstens ein Memory Leek her. Und nichtmal das
dauerhaft: sobald das Script beendet ist, ist der Speicher aufgeraeumt, basta.
Deine Alternativen habe ich dir aufgezaehlt: Serialisierung des Objektes,
sprich, du erstellst einen String, der das Objekt beschreibt oder CORBA, also
ein Server-Dienst, der das Objekt die ganze Zeit im Speicher haelt und ueber
eine Schnittstelle die Methoden zur Verfuegung stellt.
aber nach mitlerweile 1 1/2 Stunden suchzeit habe ich um diese Zeit kein Bock
mehr mir noch konfusere Gedanken zu machen, was ich bei Google wohl eingeben
muss, damit ENDLICH ne Seite kommt wo was brauchbares steht :)
Du wirst nichts finden.
Wie kann ich den GarbageCollector umgehen und vorallem WIE realisiere ich das
dann?
Gar nicht. Du solltest dein Software-Design noch einmal genauestens ueberdenken
und dabei den Lebenszyklus eines Objektes in Perl beruecksichtigen.
Gruesse,
CK
Hallo
OK, aktuelles Problem ist, das der Garbage Collektor bei Perl was löscht, was
ich eigentlich noch brauche. Ich habe was gehört von Referenzen in sich
verschachteln, damit das Objekt nicht löscht ...
Ich kenne zwar mich nicht mit dem Perl Garbage Collector aus, aber normalerweise arbeiten die so, dass solange eine Referenz darauf verweist die nicht "weggeräumt" werden. So sollte es auch der Perl-GC halten. Alles andere wäre ja unlogisch.
Wenn keine Referenz mehr darauf verweist hast Du ohnehin keine Möglichkeit mehr darauf zuzugreifen.
Deshalb verstehe ich auch Dein Problem nicht so ganz. Beschreibe es mal genauer.
Das ist Unfug. Damit stellst du hoechstens ein Memory Leek her. Und nichtmal das
dauerhaft: sobald das Script beendet ist, ist der Speicher aufgeraeumt, basta.
Memory-Leak? Bei sich gegenseitig referenzierenden Objekten? Also wenn der GC wie oben beschrieben arbeitet (wovon ich mal ausgehe), dann ist sowas schlicht und ergreifend nicht möglich!
Deine Alternativen habe ich dir aufgezaehlt: Serialisierung des Objektes,
sprich, du erstellst einen String, der das Objekt beschreibt oder CORBA, also
ein Server-Dienst, der das Objekt die ganze Zeit im Speicher haelt und ueber
eine Schnittstelle die Methoden zur Verfuegung stellt.
Ups .... was sind das nur für Vorschläge. Serialisieren tut man, wenn man ein Objekt "dauerhaft" (über die Laufzeit des Skripts hinaus) aufbewahren will oder übertragen möchte. Und Corba ..... man kann es für solche Dinge verwenden, aber ist doch arg übertrieben.
Wie kann ich den GarbageCollector umgehen und vorallem WIE realisiere ich das
dann?
Ich schließe mich hier CK an. Im Normalfall ist das umgehen nicht notwendig, ja sogar gefährlich.
Aber vielleicht bringt die genauere Schilderung Deines Problems Aufschluss über das, was Du willst.
Gruss
MichaelB
Hallo,
Ich kenne zwar mich nicht mit dem Perl Garbage Collector aus, aber
normalerweise arbeiten die so, dass solange eine Referenz darauf
verweist die nicht "weggeräumt" werden. So sollte es auch der
Perl-GC halten. Alles andere wäre ja unlogisch.
Dem ist auch so. Aber es werden *alle* Referenzen aufgeloest, wenn
das Script beendet wird.
Das ist Unfug. Damit stellst du hoechstens ein Memory Leek her.
Und nichtmal das dauerhaft: sobald das Script beendet ist, ist
der Speicher aufgeraeumt, basta.
Memory-Leak? Bei sich gegenseitig referenzierenden Objekten? Also
wenn der GC wie oben beschrieben arbeitet (wovon ich mal ausgehe),
dann ist sowas schlicht und ergreifend nicht möglich!
Es war von einem Objekt die Rede, das auf sich selbst verweist. Und
damit wird duchaus ein Memory Leek hergestellt: es koennen ruhig alle
externen Referenzen geloescht sein, die Referenz im Objekt selber ist
immer noch vorhanden und kann auch nicht aufgeloest werden. Und schon
hat man einen feinen Memory Leek.
Ups .... was sind das nur für Vorschläge. Serialisieren tut man,
wenn man ein Objekt "dauerhaft" (über die Laufzeit des Skripts
hinaus) aufbewahren will oder übertragen möchte.
Darum ging es doch. Das stellt hier aber eine enorme
Sicherheitsluecke dar, wie ich bereits ausgefuehrt habe: das Objekt
wird ueber ein Formular uebermittelt. So kann sich ein User ein
beliebiges Objekt selber zusammenstricken und die Daten manipulieren.
Und Corba ..... man kann es für solche Dinge verwenden, aber ist
doch arg übertrieben.
Nein. Das ist eigentlich eine normale Vorgehensweise, wenn ein Objekt
ueber n Instanzen erhalten bleiben soll.
Gruesse,
CK
Hallo CK,
hm .... also ich hatte die Frage so verstanden das Objekte einfach gelöscht werden _während_ der Laufzeit des Skripts.
Hab jetzt nochmal das Ausgangsposting gelesen und komme auch so keinem anderen Ergebnis.
Naja .... er soll nochmal genau schreiben, was das Problem ist und was er will. Dann klärt sich das hoffentlich auf.
Gruß
MichaelB