Heim  >  Artikel  >  Backend-Entwicklung  >  PHP-Kernel – grafische Einführung in Speicherlecks und neuen Garbage-Collection-Mechanismus

PHP-Kernel – grafische Einführung in Speicherlecks und neuen Garbage-Collection-Mechanismus

黄舟
黄舟Original
2017-03-09 09:51:581982Durchsuche

Der Garbage-Collection-Mechanismus ist ein dynamisches Speicherzuweisungsschema. Es gibt automatisch zugewiesene Speicherblöcke frei, die vom Programm nicht mehr benötigt werden. Der Prozess der automatischen Speicherrückgewinnung wird Garbage Collection genannt. Der Garbage-Collection-Mechanismus ermöglicht es Programmierern, sich nicht zu viele Gedanken über die Programmspeicherzuweisung zu machen, sodass sie mehr Energie in die Geschäftslogik investieren können.

PHP implementiert auch eine dynamische Speicherverwaltung auf der Sprachebene, die in den vorherigen Kapiteln ausführlich erläutert wurde. Die dynamische Speicherverwaltung befreit Entwickler von der umständlichen Speicherverwaltung Rettung. In Verbindung damit stellt PHP auch einen Garbage-Collection-Mechanismus auf der Sprachebene bereit, sodass sich Programmierer nicht zu viele Gedanken über die Zuweisung von Programmspeicher machen müssen.

Vor PHP5.3 hatte PHP nur eine einfache, auf Referenzzählung basierende Garbage Collection, wenn eine Variable referenziert wird count wird 0, PHP zerstört diese Variable im Speicher, aber der Müll hier kann nicht als Müll bezeichnet werden. Und PHP gibt den von diesem Prozess/Thread belegten Inhalt nach dem Ende eines Lebenszyklus frei. Diese Methode stellt fest, dass PHP in der frühen Phase keinen zu großen Speicherverlust berücksichtigen muss. Mit der Entwicklung von PHP ist jedoch die Zahl der PHP-Entwickler gestiegen und der Geschäftsumfang hat sich erweitert.

Ein vollständigerer Garbage-Collection-Mechanismus wurde in PHP5.3 eingeführt. Der neue Garbage-Collection-Mechanismus löst das Problem von Referenzspeicherlecks, die keine Zyklen verarbeiten können. Als nächstes werden wir den neuen Garbage-Collection-Mechanismus anhand von Beispieltestdaten diskutieren.



(Tipps: Was sind Refcount und Zval?

Jede Variable wird in einer zval-Struktur am Ende von PHP gespeichert. Variablen mit demselben Wert teilen sich einen Wert, um die Anzahl der Variablen zu speichern, die auf diesen Wert verweisen Beispiel: $a =$b=1, dann zeigen sie auf einen zval mit einem Wert von 1 und refount=2, was bedeutet, dass es zwei Variablen gibt, die darauf verweisen. Weitere Informationen finden Sie unter

PHP Kernel-Speichermechanismus (Trennung/Änderung))

A

Das Folgende sind die tatsächlichen Daten eines Tests, die Schlussfolgerung befindet sich in der unteren rechten Ecke:




So vermeiden Sie Speicherverluste: 1. Schreiben Sie qualitativ hochwertigen Code, um die Möglichkeit von Speicherlecks zu verringern.

2. Recyceln Sie gemäß dem PHP-Lebenszyklus und lassen Sie das System automatisch recyceln Speicher (wirksam für nicht residente Programme, RINIT, RSHOTDOWN)

3. Manuelles Recycling, dh Neustart des Servers Nginx oder Apache (MINIT, MSHOTDOWN)

4. Erhöhen Sie die php.ini-Konfigurationsdatei: php.ini memory_limit = 128M (nicht empfohlen)

Schwerwiegender Fehler: Erlaubte Speichergröße von 134217728 Bytes erschöpft (versucht, 38218371 Bytes zuzuweisen) 128 MB = 134217728 Byte


Das obige ist der detaillierte Inhalt vonPHP-Kernel – grafische Einführung in Speicherlecks und neuen Garbage-Collection-Mechanismus. 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