Heim  >  Artikel  >  Backend-Entwicklung  >  Was ist der Unterschied zwischen der Garbage Collection von PHP5 und PHP7?

Was ist der Unterschied zwischen der Garbage Collection von PHP5 und PHP7?

青灯夜游
青灯夜游Original
2019-10-19 15:49:294001Durchsuche

Was ist der Unterschied zwischen der Garbage Collection von PHP5 und PHP7?

Der Unterschied zwischen PHP5 und PHP7 Garbage Collection

Die Garbage Collection-Mechanismen von PHP5 und PHP7 sind beide Referenzzählung, jedoch in komplexen Datentypen Algorithmusverarbeitung: Es gibt eine neue Implementierung von zval in PHP7.

Die grundlegendste Änderung besteht darin, dass der von *zval benötigte Speicher nicht mehr getrennt vom Heap zugewiesen wird und der Referenzzähler nicht mehr allein gespeichert wird. Der Referenzzähler komplexer Datentypen (z. B. Zeichenfolgen, Arrays und Objekte) wird einzeln gespeichert.

Diese Implementierung hat die folgenden Vorteile:

1. Einfache Datentypen müssen nicht separat zugewiesen werden und müssen nicht gezählt werden nicht zwei weitere Male zählende Situation sein. In einem Objekt ist nur die im Objekt selbst gespeicherte Anzahl gültig.

3 Da die Anzahl jetzt vom Wert selbst gespeichert wird, kann sie mit Daten in Nicht-Zval-Strukturen geteilt werden, z. B. zwischen Zval und Hashtable-Schlüssel.

Was ist Referenzzählung?

Da PHP in C geschrieben ist, gibt es in C so etwas wie eine Struktur. Unsere PHP-Variablen werden auf diese Weise in C gespeichert.

Jede PHP-Variable existiert in einem Container namens zval. Ein zval-Container enthält zusätzlich zum Variablennamen und -wert auch zwei Bytes mit zusätzlichen Informationen:

● Ein Container namens „is_ref“. Ein boolescher Wert, der angibt, ob diese Variable zur Referenzsammlung gehört. Durch dieses Byte können wir gewöhnliche Variablen von Referenzvariablen in PHP unterscheiden.

● Das zweite zusätzliche Byte ist „refcount“, das verwendet wird, um die Anzahl der Variablen anzugeben, die auf diesen Container verweisen.

Vergleich der Referenzzählung zwischen PHP5 und PHP7

php 5.* Die Referenzzählung für Operationen wie die Variablenzuweisung erfolgt wie in der Abbildung dargestellt. Es wird eine Referenzschleife gebildet, und nach der nicht gesetzten Operation wird Müll generiert.

Was ist der Unterschied zwischen der Garbage Collection von PHP5 und PHP7?Die Anzahl von PHP 7 wird auf einen bestimmten Wert gesetzt und zval verfügt nicht über Copy-on-Write (Split-on-Write).

Und PHP 7 verfügt über eine spezielle zend_reference zur Darstellung von Referenzen.

Das obige ist der detaillierte Inhalt vonWas ist der Unterschied zwischen der Garbage Collection von PHP5 und PHP7?. 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
Vorheriger Artikel:Ist PHP eine Webseitendatei?Nächster Artikel:Ist PHP eine Webseitendatei?