Heim  >  Artikel  >  Backend-Entwicklung  >  Was ist der Garbage-Collection-Mechanismus von PHP?

Was ist der Garbage-Collection-Mechanismus von PHP?

巴扎黑
巴扎黑Original
2016-11-08 10:55:17977Durchsuche

Beschreibung: PHP verwendet einen Referenzzählmechanismus (Garbage Collection). Jedes Mal, wenn eine Referenz mit dem Objekt verbunden ist, wird der Zähler um 1 erhöht. Wenn die Referenz den generierten Raum verlässt oder auf gesetzt wird NULL, der Zähler wird um 1 dekrementiert. Wenn der Referenzzähler eines Objekts 0 erreicht, weiß die PHP-Engine, dass Sie dieses Objekt nicht mehr benötigen und gibt den von ihm belegten Speicherplatz frei.

Ist die &-Operation ein Zeiger?

Nein, die &-Operation erstellt einen Referenzzeiger, keinen Zeiger. PHP hat kein Zeigerkonzept. Ähnlich wie Softlinks für UNIX-Dateien.

Was ist der Unterschied zwischen der Unset()-Operation und der Zuweisung eines Nullwerts?

(a) Unset() trennt einfach die Referenz dieser Variablen von dem Speicher, auf den sie ursprünglich zeigte, macht die Variable selbst zu einer undefinierten Nullreferenz und dekrementiert den Referenzzähler dieses Speichers in der Symboltabelle um 1 und wirkt sich nicht auf andere Variablen aus, die auf diesen Speicher verweisen. Daher wird beim Aufruf dieser unset()-Variablen ein Hinweis ausgegeben. (Nur das erste Mal, dass eine Variable deaktiviert wird, funktioniert mehrmals)

(b) Der Vorgang der Zuweisung von Null ist ziemlich heftig. Dadurch wird der Referenzzähler des Speichers, auf den die Variable zeigt, direkt auf 0 gesetzt Symboltabelle Der Speicher wird natürlich von der Engine zurückgewonnen und es ist nicht bekannt, wann er wieder verwendet wird. Es kann sofort zum Speichern anderer Informationen verwendet werden oder nie wieder verwendet werden. Aber egal was passiert, alle Variablen, die ursprünglich auf diesen Speicher verwiesen haben, können nicht mehr auf den zurückgewonnenen Speicher zugreifen, und jede Variable, die versucht, ihn aufzurufen, gibt Null zurück.

Nur ​​wenn der Referenzzähler eines Speicherabschnitts in der Symboltabelle 0 ist, beansprucht die PHP-Engine diesen Speicherabschnitt zurück.

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