Der ganze Grund für die Implementierung eines Garbage-Collection-Mechanismus besteht darin, Speicherbedarf zu sparen, indem zirkulär referenzierte Variablen bereinigt werden.
Referenzanzahl: PHP-Variablen existieren in einem Variablencontainer namens „zval“. Ein zval-Variablencontainer enthält neben Typ und Wert der Variablen auch zwei Bytes zusätzlicher Informationen: is_ref und refcount. is_ref ist ein Bool-Wert, der verwendet wird, um zu identifizieren, ob diese Variable zu einer Referenzsammlung gehört, sodass die PHP-Engine gewöhnliche Variablen von Referenzvariablen unterscheiden kann; refcount wird verwendet, um die Anzahl der Variablen darzustellen, die auf diesen zval-Variablencontainer verweisen 0 bedeutet, dass die Variablen gelöscht oder recycelt werden können
<?php $a = array( 'meaning' => 'life', 'number' => 42 ); $a['life'] = $a['meaning']; xdebug_debug_zval( 'a' ); ?>
Die Ausgabe der obigen Routine lautet wie folgt:
a: (refcount=1, is_ref=0)=array ( 'meaning' => (refcount=2, is_ref=0)='life', 'number' => (refcount=1, is_ref=0)=42, 'life' => (refcount=2, is_ref=0)='life' )
Die Ausgabe von : >Die Ergebnisse des obigen Beispiels sind wie folgt:
<?php $a = array( 'one' ); $a[] =& $a; xdebug_debug_zval( 'a' ); unset($a); xdebug_debug_zval( 'a' ); ?>
(refcount=1, is_ref=1)=array ( 0 => (refcount=1, is_ref=0)='one', 1 => (refcount=1, is_ref=1)=... )
Recyclingzyklus: Kann zur Behandlung von Speicherlecks verwendet werden, die durch Zirkelverweise verursacht werden. Wenn der Referenzzähler eines Variablencontainers steigt, wird er weiterhin verwendet und landet natürlich nicht mehr im Müll; wenn der Referenzzähler auf Null sinkt, wird der Variablencontainer gelöscht (frei). Das heißt, ein Garbage-Cycle findet nur dann statt, wenn der Referenzzähler auf einen Wert ungleich Null reduziert wird. Zweitens wird in einem Garbage-Cycle überprüft, ob der Referenzzähler um 1 reduziert (simuliert) wird und welche Variablencontainer überprüft werden Referenzen haben Die Häufigkeit ist Null, um herauszufinden, welcher Teil Müll ist
Schalten Sie den Müllsammelmechanismus ein und aus: In Zusätzlich zum Ändern der Konfiguration
zend.enable_gc können Sie den Garbage-Collection-Mechanismus auch ein- und ausschalten, indem Sie die FunktionenMögliche Wurzeln werden auch dann aufgezeichnet, wenn der Garbage-Collection-Mechanismus nicht verfügbar ist, sodass nicht jedes Mal, wenn ein möglicher Root gefunden wird, überprüft werden muss, ob der Garbage-Collection-Mechanismus aktiviert ist, und der Aufzeichnungsvorgang schneller ist . Der Aufruf der Funktion gc_collect_cycles() kann das Recycling von Zyklen erzwingen.
Das obige ist der detaillierte Inhalt vonWas ist der PHP-Garbage-Collection-Mechanismus?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!