{"id":1230,"date":"2010-01-22T11:23:44","date_gmt":"2010-01-22T10:23:44","guid":{"rendered":"http:\/\/olbertz.de\/blog\/?p=1230"},"modified":"2010-01-22T11:23:44","modified_gmt":"2010-01-22T10:23:44","slug":"garbage-collection-in-php","status":"publish","type":"post","link":"https:\/\/olbertz.de\/blog\/2010\/01\/22\/garbage-collection-in-php\/","title":{"rendered":"Garbage Collection in PHP"},"content":{"rendered":"<p>Ich war gestern Teilnehmer an einer kleinen Diskussion zum Thema <em>Garbage Collection in PHP<\/em>. Im Gegensatz zu z.B. JAVA verwendet PHP einfaches <em><a href=\"http:\/\/php.net\/manual\/en\/features.gc.php\">Reference Counting<\/a><\/em> um zu ermitteln, welche Speicherbereiche nicht mehr ben&#246;tigt werden. Wenn sich nun aber Objekte gegenseitig referenzieren &#8211; auch gerne &#252;ber sehr viele Zwischenobjekte &#8211; versagt diese Strategie letztendlich.<\/p>\n<p>Das ist ganz klar ein Schwachpunkt gegen&#252;ber z.B. JAVA, wo es auch <a href=\"http:\/\/www.ibm.com\/developerworks\/library\/j-jtp10283\/\">GC Strategien gibt<\/a>. Ich fand meine Reaktion darauf aber ganz interessant. Das Problem wurde n&#228;mlich anhand einer doppelt verketteten Liste erl&#228;utert und mein erster Gedanke war: wo ist das Problem? Eine solche Liste sollte doch mit Klassen implementiert werden und dann muss halt der Destructor der Liste daf&#252;r sorgen, dass alle Elemente darin gel&#246;scht werden.<\/p>\n<p>Als Gegenargument kam dann, dass der Destructor ja nicht zwangsl&#228;ufig aufgerufen werden muss. Was nat&#252;rlich stimmt und was ja auch &#252;berhaupt erst eine <em>Garbage Collection<\/em> notwendig macht. Meine fr&#252;hen Erfahrungen mit C\/C++ haben mich aber so sehr darauf getrimmt, immer sch&#246;n aufzupassen, was ich mit meinem allokierten Speicher mache, dass ich dieses Verhalten auch auf PHP &#252;bertragen habe.<\/p>\n<p>Bei PHP kommt ja nun noch hinzu, dass es meisten in einer Webumgebung eingesetzt wird und somit nur ein kurzlebiger Prozess abl&#228;uft. Da wird es in den meisten F&#228;llen keinen Unterschied machen, ob zwischendurch die Garbage Collection aufr&#228;umt, oder das mit Ende des Prozesses vom Interpreter erledigt wird.<\/p>\n<p>Sobald man PHP aber auch f&#252;r lang laufende Aufgaben einsetzt. wie z.B. eigene Daemons, sollte man den Speicherverbrauch genau im Auge behalten.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Ich war gestern Teilnehmer an einer kleinen Diskussion zum Thema Garbage Collection in PHP. Im Gegensatz zu z.B. JAVA verwendet PHP einfaches Reference Counting um zu ermitteln, welche Speicherbereiche nicht mehr ben&#246;tigt werden. Wenn sich nun aber Objekte gegenseitig referenzieren &hellip; <a href=\"https:\/\/olbertz.de\/blog\/2010\/01\/22\/garbage-collection-in-php\/\">Weiterlesen <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-1230","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/olbertz.de\/blog\/wp-json\/wp\/v2\/posts\/1230","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/olbertz.de\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/olbertz.de\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/olbertz.de\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/olbertz.de\/blog\/wp-json\/wp\/v2\/comments?post=1230"}],"version-history":[{"count":2,"href":"https:\/\/olbertz.de\/blog\/wp-json\/wp\/v2\/posts\/1230\/revisions"}],"predecessor-version":[{"id":1232,"href":"https:\/\/olbertz.de\/blog\/wp-json\/wp\/v2\/posts\/1230\/revisions\/1232"}],"wp:attachment":[{"href":"https:\/\/olbertz.de\/blog\/wp-json\/wp\/v2\/media?parent=1230"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/olbertz.de\/blog\/wp-json\/wp\/v2\/categories?post=1230"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/olbertz.de\/blog\/wp-json\/wp\/v2\/tags?post=1230"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}