Heim >Backend-Entwicklung >PHP-Tutorial >Detaillierte Erklärung der PHP-Speicherfreigabe und Garbage Collection

Detaillierte Erklärung der PHP-Speicherfreigabe und Garbage Collection

php中世界最好的语言
php中世界最好的语言Original
2018-05-17 13:44:541712Durchsuche

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 -> &#39;apple&#39; <- $b

a und b zeigen auf denselben Speicherbereich. Wir erhalten string(5) „apple“ string(5 bis var_dump($a, $b ) ) „Apfel“, was wir erwartet hatten.

unset Funktion

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:

&#39;apple&#39; <- $b

Wichtige 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!

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