PHP-Objekt erstellen und Speichernutzung
Einem basic dummy-Klasse:
class foo
{
var $bar = 0;
function foo() {}
function boo() {}
}
echo memory_get_usage();
echo "\n";
$foo = new foo();
echo memory_get_usage();
echo "\n";
unset($foo);
echo memory_get_usage();
echo "\n";
$foo = null;
echo memory_get_usage();
echo "\n";
Ausgänge:
$ php test.php
353672
353792
353792
353792
Nun, ich weiß, dass PHP-docs sagen, dass der Speicher nicht freigegeben werden, bis Sie benötigt wird (schlagen auf die Decke). Jedoch, ich schrieb dies als einen kleinen test, denn ich habe eine viel längere Aufgabe, mit einem viel größeren Objekt, mit vielen Instanzen des Objekts. Und der Speicher nur klettert, schließlich läuft aus und stoppen Ausführung. Obwohl diese großen Objekte belegen Speicher, da Zerstöre ich Sie, nachdem ich fertig bin mit jedem einzelnen (Seriell), sollte es nicht der Arbeitsspeicher (es sei denn, ein einzelnes Objekt erschöpft den gesamten Bereich für den Speicher, was nicht der Fall ist).
Gedanken?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Haben Sie irgendwelche Zirkelbezüge zu stoppen könnte der garbage collector seine Aufgabe?
Habe ich mal einen quick-test-Erstellung von 1.000.000 Objekte und der Speicher war nicht aufgegessen:
65080 65384 65568 <-- Eine sehr kleine erhöhen für 1.000.000 Objekte erstellt und zerstört
PHP-Unterstützung für Objekte & Klassen sind nicht sehr effizient bei der ver 5.2 (noch wurden Sie in der Vergangenheit), aber die bevorstehende 5.3 und 6.0 sind eine große überholung in Bezug auf Klassen-und Objekt-Nutzung und sehen Sie die Geschwindigkeit und Speicher-Verbesserungen in beiden.
Habe ich auch geschrieben, einige blanke Knochen frameworks in PHP 5.2.x und fand die Speicherauslastung überraschend auch aufgebläht. Obwohl wenn man bedenkt, wie Billig leistungsstarken multi-core-CPUs und ram ist, würde ich sagen, halten die Codierung in einer Weise, die macht am meisten Sinn für Sie und schafft eine RAD-setup.
Wenn mit Smarty oder Drupal macht Ihre Arbeit Projekt schneller fertig, dann verwenden Sie Sie, oder was auch immer custom Sachen, die Sie tun. Lassen Sie sich nicht von der heutigen schlechten Speicher/Geschwindigkeit Verwendung schalten Sie Sie aus, um OOP und frameworks, denn morgen geht ' s version hat einige Bemerkenswerte Verbesserungen (real world benchmarks haben gezeigt, dass eine 30% Verbesserung der Geschwindigkeit auf dem gleichen code).
PS: Es ist etwas falsch mit Ihrer Installation, lief ich den gleichen code auf Apache /w PHP 5.2.8 auf Windows XP und habe: 60872 61080 61080 61080
Hier ist ein überarbeitetes Beispiel mit zirkulären Referenzen:
Ausgänge mit PHP 5.3.6 (cli):