Thread speicherprobs: ram-speicher freigeben?
(17 answers)
Opened by norman at 2004-03-26 16:07 Code: (dl
)
undef $ref * es ist eine zirkulaere Referenz vorhanden (hier wahrscheinlich nicht der Fall) * es gibt Faelle, wo ein undef nicht sofort zu einer Freigabe des Speichers fuehrt, sondern erst, wenn der aktuelle Scope verlassen wird (das ist z.B. bei Schleifen der Fall) * der Speicher wird korrekt per free() freigegeben, aber das OS kann die Speicherseiten nicht freigeben. Das kann passieren, wenn hinter dem grossen Speicherblock noch kleinere Stuecke alloziiert wurden, die nach dem Freigeben des grossen weiter bestehen. Jetzt hat man ein riesiges ungenutztes Loch, das man nicht wegbekommt. Das ist nicht die Schuld von Perl, sondern des Speichermanagments des OS. Dass du ueberhaupt mehr Speicher als erwartet verbrauchst, liegt daran, dass Perl einen Overhead fuer das Speichern von Variablen hat. Ein Integer, das eigentlich nur 4 Bytes belegen muesste, belegt ca. 24 Bytes. Weiteren Overhead kann es fuer benoetigte Referenzen etc. geben. Evtl. wird die Rueckgabe der Datenbank nicht sofort weggeschmissen. Warum benutzt du eigentlich keine Schleife mit fetchrow? |