FHEM Forum

FHEM - Entwicklung => FHEM Development => Thema gestartet von: Loredo am 17 Oktober 2013, 09:39:34

Titel: Speicherverbrauch / Garbage Collection
Beitrag von: Loredo am 17 Oktober 2013, 09:39:34
Hi,


wie handhabt FHEM (bzw. auch Perl generell, ich bin da kein Experte) die Garbage Collection für den Arbeitsspeicher?


Hintergrund:
Mein ONKYO_AVR Modul führt wohl bei einigen Usern über verschiedene Zeiträume zu einem kompletten Absturz von FHEM. Leider steht überhaupt nix im Log. Die User verwenden (leider) extensiv Funktionen mit DLNA und der Receiver schickt all seine Infos einfach ungefragt in den Antworten auf die Fragen mit, die ich ihm schicke. Diese Antworten laufen bei mir alle erstmal in einen Hash und erst wenn die Antwort da ist, die ich erwarte, beende ich die Verbindung. Eigentlich wird der Hash im Programmcode jedes Mal neu erzeugt bzw. überschrieben. Aber kann es sein, dass der Speicherbereich tatsächlich gar nicht freigegeben wird und die ganzen Daten sich einfach nur addieren und am Ende irgendwo ein Pufferüberlauf stattfindet?


Siehe auch
http://forum.fhem.de/index.php/topic,15024.msg100488.html#msg100488




Gruß
Julian
Titel: Antw:Speicherverbrauch / Garbage Collection
Beitrag von: rudolfkoenig am 17 Oktober 2013, 10:11:46
Perl macht kein Garbage-Collection, sondern fuehrt Buch (referenz-counter). Nachteil: spezielle Datenstrukturen (mir ist z.Zt. nur XML-DOM bekannt), die mehrere Zeiger auf das gleiche Objekt fuehren (child, parent, prev, next, etc) muessen explizit vom Programmierer freigegeben werden. Normale Datenstrukturen wie hash und array werden automatisch weggeraeumt.

Das Problem sollte FHEM-Anwender nicht betreffen, Modul-Autoren dagegen schon, falls sie z.Bsp. XML-Daten eingelesen haben.