Heim >Backend-Entwicklung >PHP-Tutorial >Detaillierte Erklärung der PHP-Speicherfreigabe und Garbage Collection
Dieses Mal werde ich Ihnen die Verwendung von PHP-Speicherfreigabe und Garbage Collection ausführlich erläutern. Was sind die Vorsichtsmaßnahmen für PHP-Speicherfreigabe und Garbage Collection? .
ReferenzZuweisung
$a = 'apple'; $b = &$a;
Im obigen Code weise ich einer VariableZeichenfolge zu >a, und weisen Sie dann die Referenz von a der Variablen b zu. Offensichtlich sollte der Speicher, der zu diesem Zeitpunkt zeigt, so aussehen:
$a -> 'apple' <- $ba und b zeigen auf denselben Speicherbereich. Wir erhalten string(5) „apple“ string(5 bis var_dump($a, $b ) ) „Apfel“, was wir erwartet hatten. Angenommen, ich möchte die Zeichenfolge „Apple“ aus dem Speicher freigeben. Ich habe Folgendes getan:
unset($a);Aber durch das erneute Drucken der Informationen der beiden Variablen $a $b habe ich dieses Ergebnis erhalten: Hinweis: Undefinierte Variable: a und string(5) "apple" . Seltsamerweise verweisen $a und $b beide auf einen Speicherbereich, und $a ist eindeutig freigegeben. Warum ist $b immer noch „Apfel“. Tatsächlich zerstört unset() einen Variablenzeiger und gibt die in diesem Speicherbereich gespeicherte Zeichenfolge nicht frei, sodass der Speicherzeiger nach Abschluss der Operation einfach wie folgt aussieht:
'apple' <- $bWichtige Punkte, die Sie sich merken sollten: unset() gibt den Speicher, auf den die Variable zeigt, nicht frei, sondern zerstört nur den Variablenzeiger. Verringern Sie gleichzeitig den Referenzzähler dieses Speicherabschnitts um 1. Wenn der Referenzzähler 0 ist, d. h. wenn dieser Speicherabschnitt von keiner Variablen referenziert wird, wird die Garbage Collection von PHP ausgelöst.
Direkt recyceln
Was kann man also tun, um den von „Apfel“ belegten Speicher wirklich freizugeben? Mit der obigen Methode können wir unset($a) und dann unset($b) verwenden, um alle Referenzen im Speicherbereich zu zerstören. Wenn die Referenzanzahl auf 0 reduziert wird, wird sie natürlich von PHP recycelt . Natürlich gibt es eine direktere Methode:$a = null;Durch die direkte Zuweisung von Null wird der Speicherbereich geleert, auf den $a zeigt, der Referenzzähler wird auf Null zurückgesetzt und der Speicher wird freigegeben .
Die Skriptausführung endet
php ist eine Skriptsprache. Wenn die Skriptausführung endet, wird der gesamte im Skript verwendete Speicher freigegeben. Ich glaube, dass Sie die Methode beherrschen, nachdem Sie den Fall in diesem Artikel gelesen haben. Weitere spannende Informationen finden Sie in anderen verwandten Artikeln auf der chinesischen PHP-Website! Empfohlene Lektüre:Detaillierte Erläuterung der Verwendung des PHP-Template-Methodenmusters
Detaillierte Erläuterung des Prinzips und der Verwendung des automatischen Ausfüllens des thinkPHP-Frameworks
Das obige ist der detaillierte Inhalt vonDetaillierte Erklärung der PHP-Speicherfreigabe und Garbage Collection. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!