/ / Speicherhandhabung in PHP vs. Java [Duplikat] - PHP, Speicher, Garbage Collection

Speicherbehandlung in PHP vs Java [Duplikat] - PHP, Speicher, Garbage-Collection

Mögliche Duplikate:
Gibt es eine Müllsammlung in PHP?

In Java gibt es ein Konzept namens Garbage Collector. In Java wird ein Objekt für den Müll zugelassenCollection, wenn sie nicht von Live Threads oder statischen Hinweisen erreichbar ist. Mit anderen Worten, Sie können sagen, dass ein Objekt für die Garbage Collection geeignet ist, wenn alle Referenzen null sind.

Was wird in PHP passieren? Führt dies zu einem Speicherüberlauf. Ist das ein Nachteil in PHP oder gibt es Möglichkeiten zu handhaben und was sind die Wege und Techniken PHP sorgt für einen effizienten Umgang mit Speicher?

Antworten:

3 für die Antwort № 1

PHP hat einen Garbage-Collector, aber vor PHP 5.3 (5.2?) Konnte er keine Zirkelverweise verarbeiten und konnte bestimmte Konstrukte nicht GC ausführen. z.B.

$ a = & $ a;

würde ein Speicherverlust verursachen. PHP führt den GC nicht aus, es sei denn, ein GC-Lauf ist teuer und normalerweise nicht erforderlich, da die meisten PHP-Skripts kurzlebig sind. Der GC tritt nur dann ein, wenn Speicherdruck vorhanden ist, und Sie erhalten nur dann einen OOM-Fehler, wenn nicht genügend Speicherplatz freigegeben werden kann.


4 für die Antwort № 2

Das Wichtigste an php ist, dass es GC basierend auf der Referenzzählung hat. Siehe Beispiel:

$a = 8;
unset($a); //memory free

$a = 8;
$b = &$a; //or even $b = $a, see below
unset($a); //memory unchanged

Und php verknüpft alle Daten miteinander, bevor sie geändert werden:

$a = 8;
$b = $a; //we use memory only for $a
$b++; //now we use twice more memory

Das ist ein guter Ansatz für die Skriptsprache,weil Sie Objekte zwischen verschiedenen Ebenen Ihrer App übertragen können (z. B. Daten auf diese Weise verschieben M-> C-> V in MVC) und keine Gedanken über Zeiger oder Speicherverwendung machen.

Aber wenn Sie so etwas tun (Beispiel aus Dokumente):

$a = array( "one" );
$a[] =& $a;

Sie können das Gedächtnis überhaupt nicht bereinigen. Dies ist eine typische Situation, wenn wir eine Hauptklebstoffklasse haben application In MVC wird das in jedem Objekt gespeichert. Wir werden es nicht schaffen clean up Speicher in diesem Fall. Es ist jedoch nicht so wichtig für die Skriptsprache mit einer Lebensdauer von mehreren ms.


2 für die Antwort № 3

PHP macht auch eine Garbage Collection. In PHP muss man sich nur sehr selten über den Speicher Gedanken machen. In PHP 5.3 wurde die Garbage Collection erheblich verbessert. Lesen Sie im PHP-Handbuch.