Heim  >  Artikel  >  Backend-Entwicklung  >  Was ist Garbage Collection in PHP? Welchen Einfluss hat es auf die Leistung?

Was ist Garbage Collection in PHP? Welchen Einfluss hat es auf die Leistung?

青灯夜游
青灯夜游nach vorne
2021-07-29 18:28:072257Durchsuche

Dieser Artikel führt Sie in die Garbage Collection ein, analysiert kurz den Garbage Collection-Mechanismus in PHP und spricht schließlich über die Auswirkungen der Garbage Collection auf die Leistung.

Was ist Garbage Collection in PHP? Welchen Einfluss hat es auf die Leistung?

Ich glaube, dass Schüler, die ein wenig über Entwicklung gelernt haben, wissen, dass eine Variable unabhängig von der Programmiersprache im Speicher gespeichert wird. Tatsächlich manipulieren wir Entwickler ständig den Speicher. Wenn wir weiterhin neue Variablen hinzufügen, wird der Speicher unbegrenzt vergrößert und schließlich voll. Dies führt zu einem Speicherverlust. In der täglichen Entwicklung treten jedoch fast nie Speicherüberlauffehler auf, es sei denn, es wird jeweils eine große Datei geladen. Dies ist die Rolle des Garbage-Collection-Mechanismus.

Was ist Müllabfuhr?

Bei der Verwendung der C-Sprache müssen wir manuell freien Speicher freigeben. Die meisten Programmiersprachen nach C verfügen über eine Verarbeitungsfunktion wie Garbage Collection, den Garbage Collection-Mechanismus, über den wir sprechen werden heute, auch bekannt als GC. In Entwicklungssprachen mit GC-Funktionen müssen wir uns nicht darum kümmern, wann Speicher freigegeben wird, und wir müssen den Inhalt dieses Teils überhaupt nicht verstehen, da diese Sprachen dies bereits gehandhabt haben Problem der Speicherfreigabe für uns auf der untersten Ebene.

Der bekannteste Inhalt in diesem Bereich ist natürlich der Garbage-Collection-Mechanismus in Java. Natürlich sind viele PHPer diesem Aspekt möglicherweise noch nie ausgesetzt .

Der Garbage-Collection-Algorithmus von PHP

Im vorherigen Artikel haben wir das Konzept der Referenzzählung vorgestellt. Vor PHP5.3 war der Garbage-Collection-Mechanismus von PHP sehr einfach. Er bestand darin, alle Elemente mit einem Refcount von 0 zu bereinigen und zu recyceln, was auf der untersten Ebene kostenlos war. Diese Methode führt jedoch zu einem Problem, nämlich dem Zirkelverweis, den wir im Artikel über die Referenzzählung erwähnt haben. Diese Art von Referenzproblem kann nicht durch die normale Beurteilung der Refcount recycelt werden. Vor PHP5.3 führten Zirkelverweise also zu Speicherlecks.

Der Grund, warum ich die Version hervorhebe, ist, dass PHP nach 5.3 den Garbage-Collection-Algorithmus verbessert und diesen Zirkelverweis gelöst hat. (Natürlich versuchen wir, diese Art von Zirkelverweisproblemen in der täglichen Entwicklung zu vermeiden.) Für den spezifischen Algorithmus zitieren wir das offizielle Bild:

Was ist Garbage Collection in PHP? Welchen Einfluss hat es auf die Leistung?

Das offizielle Dokument enthält eine detaillierte Erklärung, die Sie jedoch immer noch verwirrt. Benutzen wir einfache Sprache (menschliche Sprache), um diesen Prozess zu beschreiben.

Zuallererst haben wir das Konzept des Root-Puffers, der im Bild die Wurzel darstellt. Auf der untersten Ebene können wir durch eine Reihe unverständlicher Algorithmen eine mögliche Wurzel jeder Variablen finden. PHP legt die möglichen Wurzeln der Variablen im Root-Puffer ab.

Wenn der Root-Puffer voll ist, beträgt der Standardwert im Allgemeinen 10000. Sie müssen den Quellcode ändern und neu kompilieren, um diesen Wert zu ändern. PHP startet den Garbage-Collection-Mechanismus, folgt dem Tiefendurchlaufalgorithmus vom Root-Puffer, um alle Variablen zu finden, die sich auf diesen möglichen Root beziehen, reduziert den Refcount der von einem bestimmten möglichen Root gefundenen Variablen um 1 und erstellt eine Markierung zum Markieren die aktuelle.

Dann die Tiefe erneut durchqueren. Wenn refcount nicht 0 ist, addiere 1. Wenn es 0 ist, behalte es unverändert.

Dann löschen Sie alle möglichen Roots im Root-Puffer, löschen statt löschen. Bereinigen Sie dann alle Variableninhalte und geben Sie sie mit einem Refcount von 0 frei.

Bist du schon verwirrt? Tatsächlich bin ich auch sehr verwirrt, ich weiß nicht, wie ich diesen Absatz schreiben soll ...

Merken Sie einfach ein paar wichtige Punkte und Sie können das Interview bewältigen und die meisten Menschen im Handumdrehen töten.

  • Nach PHP5.3 prüfen wir nicht direkt, ob der Refcount jeder Variablen 0 ist. Der verwendete Algorithmus ist ein Root-Puffer und wird entsprechend bereinigt C und Algorithmen. Studieren Sie es sorgfältig, wenn Sie den Quellcode lernen
  • Die Garbage Collection wirkt sich auf die Leistung aus. Die Auswirkung von
  • Wie bereits erwähnt, wird die Garbage Collection sofort ausgeführt, nachdem der Root-Puffer voll ist. Außerdem wird es zwei Tiefendurchläufe geben, was zwangsläufig zu einem Leistungsverbrauch führt. Schließlich braucht die Ausführung von Algorithmen Zeit. Im Vergleich zu verheerenden Fehlern wie einem Speicherüberlauf ist der durch die Garbage Collection verursachte Leistungsverlust jedoch grundsätzlich vernachlässigbar.

Zusammenfassung

Tatsächlich müssen wir uns nur an einige wichtige Punkte zur Speicherbereinigung erinnern. Der spezifische Kernalgorithmus und der Inhalt können natürlich erst nach einer eingehenderen Untersuchung des Quellcodes verstanden werden ist auch das, was wir lernen. Das Ziel des Lernens ist, dass wir in Zukunft definitiv den zugrunde liegenden Inhalt des Quellcodes abdecken, also lasst uns abwarten und sehen!

Empfohlenes Lernen: „PHP-Video-Tutorial

Das obige ist der detaillierte Inhalt vonWas ist Garbage Collection in PHP? Welchen Einfluss hat es auf die Leistung?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:juejin.cn. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen