Heim  >  Artikel  >  Backend-Entwicklung  >  In PHP integrierte Garbage Collection

In PHP integrierte Garbage Collection

php中世界最好的语言
php中世界最好的语言Original
2018-03-24 11:55:121461Durchsuche

Dieses Mal präsentiere ich Ihnen die integrierte Garbage Collection von PHP. Was sind die Vorsichtsmaßnahmen für die integrierte Garbage Collection von PHP? Hier sind praktische Fälle, werfen wir einen Blick darauf.

1. Wenn jede Variable definiert ist, wird sie in einem Container namens zval gespeichert, der den Typ und den Wert der Menge sowie einen Refcount (verstanden als die Anzahl der Variablen) und is_ref (verstanden) enthält (z. B. ob es sich um eine Referenzvariable handelt) enthält zwei zusätzliche Informationen. Wenn die Variable einmal referenziert wird, beträgt der Refcount +1. Wenn Sie sie deaktivieren, wird der Wert um 1 reduziert, bis er 0 ist, und sie wird aus der Variable gelöscht Speicher

2. Wenn Sie eine Variable definieren, wird der vorgegebene Wert nicht jedes Mal erweitert, da PHP einen Platz im Speicher belegt und dieser Ihnen zugewiesen wird, wenn Sie die Variable deklarieren. aber wenn Sie diesen vorab belegten Speicherplatz überschreiten Danach wird der Speicherplatz vergrößert, aber wenn Sie die Variable löschen, verschwindet die Speicherplatzkapazität nicht sofort

3. Die Referenz der Variablen erhöht den Speicher nicht Allein durch die Verwendung wird auf den zval-Strukturkörper verwiesen, einfach refcount+1

4. Vereinfacht ausgedrückt: PHPs Variable basiert auf einer internen Implementierung von symbol_table Symboltabelle, und die grundlegende Implementierung der Symboltabelle ist HashTable, d. h. Es stimmt mit der grundlegenden Implementierung des PHP-Arrays überein. Aufgrund der Existenz der Symboltabelle können wir global zum Markieren globaler Variablen verwenden und Funktionen wie compact verwenden, um Variablen direkt aus der aktuellen Symboltabelle abzurufen.

Lassen Sie uns darüber sprechen, ob unset($a) den Speicherplatz sofort freigibt. Die Antwort lautet: Nein. Unset unterstützt das Löschen des Elements mit dem Namen a aus der Symboltabelle (es markiert lediglich den Speicherplatz, der wieder verfügbar ist, anstatt ihn freizugeben). Raum).

Lassen Sie uns über die Situation der wiederholten Aktualisierung von $key in einer Schleife sprechen. Da die Variablen mit demselben Namen aktualisiert werden, handelt es sich um dasselbe Element in der Symboltabelle. Beim Aktualisieren wird dieselbe Position aktualisiert. und der Wert des vorherigen Elements wird sofort aktualisiert.

Lassen Sie uns über das Problem sprechen, dass der Speicher zunimmt, wenn neue Variablen deklariert werden. Die Antwort ist ungewiss. Dies liegt daran, dass die Funktion der auf HashTable implementierten Symboltabelle beim Hinzufügen eines Elements nicht für den Speicher für ein Element gilt, sondern für den Speicher für mehrere Elemente gleichzeitig (nur diese Positionsmarkierungen werden nicht verwendet). voll, Wenn neuer Speicher für mehrere Elemente beantragt wird. Das heißt, wenn wir eine Variable deklarieren oder zuweisen und diese nicht in der Symboltabelle enthalten ist, fügt PHP sie der Symboltabelle hinzu. Wenn die Symboltabelle zu diesem Zeitpunkt nicht voll ist, wird die Symboltabelle verwendet, die vorhanden ist Speicher beantragt, aber nicht verwendet. Wenn die Symboltabelle gerade voll ist, wird neuer Speicher für die Speicherung verwendet, und der neue Speicher ist nicht nur so klein wie der für diese Variable erforderliche Speicher

Ich glaube Ihnen Ich habe die Methode gemeistert, nachdem ich den Fall in diesem Artikel gelesen habe. Weitere spannende Inhalte finden Sie in anderen verwandten Artikeln auf der chinesischen PHP-Website!

Empfohlene Lektüre:

Detaillierte Erläuterung der Bereitstellung von mysqld_multi auf einem einzelnen Computer

Der Grund für die Installation des MySQL-Dienstes Start fehlgeschlagen

Verwenden Sie AngularJS, um das Passwort auf der Front-End-Schnittstelle abzurufen

Das obige ist der detaillierte Inhalt vonIn PHP integrierte Garbage Collection. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn