Zeit ?ndert sich und die Begriffe ?ndern sich entsprechend. Heute nennen wir es "PHP Resource Recycling" und nicht "Müllrecycling". Dies spiegelt seine Essenz enger wider: Es wird nicht einfach weggeworfen, sondern Ressourcen, die nicht mehr verwendet werden. Es ist jedoch h?ufiger, der Geschichte des "Müllrecyclings" zu folgen.
Kernpunkte:
-
Die Müllsammlung von
- PHP ist in drei Ebenen unterteilt: Umfangsende, Referenzz?hlung und formale Müllsammlung. Am Ende des Umfangs werden Ressourcen in einer Funktion, einem Skript oder einer Sitzung gel?scht. Die Referenzzahl verfolgt die Anzahl der Entit?ten anhand einer Variablen. Der in PHP 5.3 eingeführte formale Müllsammlungsmechanismus befasst sich mit F?llen, in denen die Referenzz?hlungen ungleich Null sind, aber weiter abnehmen k?nnen. Die Müllsammlung von
- PHP ist immer aktiviert, kann jedoch manuell gesteuert werden. Es kann in der Datei php.ini oder im Skript unter Verwendung der Funktionen gc_enable () und gc_disable () deaktiviert werden. Die Funktion GC_COLLECT_CYCLEN () erm?glicht es, eine manuelle Müllsammlung zu starten, und die Gr??e der Stammpuffer kann im PHP -Quellcode ge?ndert werden.
- W?hrend die Müllsammlung hilft, Speicherzuweisung zu verwalten und Speicherlecks zu verhindern, k?nnen die ressourcenintensiven Eigenschaften auch die Leistung beeinflussen. Daher sollte es strategisch verwendet werden, insbesondere in langj?hrigen Skripten oder unendlichen Skripten, in denen die Müllsammlung entscheidend ist, um Speicherlecks zu verhindern.
- Gute Programmierpraktiken helfen dabei, die Müllsammlung zu optimieren. Dies beinhaltet die Minimierung oder Beseitigung globaler Variablen, Bindungsvariablen an Scopes und die Beachtung der Situationen, in denen Array -Verschachtelung oder Objekt Objekte referenzieren, da diese Situationen zu Speicherlecks führen k?nnen und auch das Hauptziel formaler Müllsammlungsmechanismen sind.
Programm erzeugt Müll
Programm verwendet Ressourcen, manchmal kleine Ressourcen, manchmal gro?e Ressourcen. Zum Beispiel Datenfelder. Ein Programm kann ein Datenfeld definieren (z. B. eine Seriennummer) und es im Programm verwenden. Nach der Definition nimmt dieses Datenfeld Speicherplatz ein, m?glicherweise nur wenige Bytes, aber noch Platz. Da jede Maschine oder die Programmierumgebung nur einen begrenzten Platz bietet, verringert der verbleibende Platz den Platz, der von diesem Feld besetzt ist. Wenn das Programm endet, verschwindet das Programm und jeder Bereich, den es verbraucht, und der gesamte verfügbare Platz wird in der maximalen Gr??e wiederhergestellt. Aber was passiert, wenn das Programm niemals endet? Ich habe schon einige dieser Programme geschrieben. Sie sind sch?ne Meisterwerke und ich bin immer glücklich, wenn andere im Workshop bemerken, dass ich einen geschaffen habe. Nichts zeigt Ihre F?higkeiten besser als ein gro?er IBM -Computer selbst und in den umliegenden F?chern ruft eine Person nach dem anderen: ?Hey, stimmt etwas mit dem System nicht?“ lenken Sie die Aufmerksamkeit von Ihnen ab. Einige Programme sind jedoch sogar so konzipiert, dass sie für immer laufen, wie D?monen und andere solche Programme. W?hrend sie laufen, kann die Menge an Müll, die sie erzeugen, weiter wachsen. Wenn die verschlossenen Ressourcen gro? sind, wirkt sich dies wirklich negativ auf das System aus. Daher muss jede Sprache eine M?glichkeit haben, Waisenressourcen zu l?schen, sie anderen Benutzern zur Verfügung zu stellen und sicherzustellen, dass die Gesamtmenge des verfügbaren Systemraums gleich bleibt. Glücklicherweise verwendet PHP eine dreischichtige Methode zur Entfernung von Müll.
Erste Schicht - End des Umfangs
Zuallererst wird, wie die meisten Sprachen, bei endet, alles in diesem Umfang zerst?rt und alle zugewiesenen Ressourcen befreit. Scopes k?nnen Funktionen, Skripte, Sitzungen usw. abdecken. Wenn das Zielfernrohr endet, endet alles, was es h?lt. Natürlich k?nnen Sie Ressourcen jederzeit mit der Funktion "set () freilegen. Dies ist einer der Gründe, warum Funktionen und Methoden so wichtig sind, weil sie Bereiche einrichten, angeben, wann eine bestimmte Speicherverwendung beginnt und endet, und begrenzt, wie lange Dinge existieren. Sie sollten nach M?glichkeit verwendet werden, nicht globale Einheiten.
zweite Schicht - Zitatzahl
Zweitens verwendet PHP wie die meisten Skriptsprachen eine Technik, die als Referenzz?hlung bezeichnet wird, um zu verfolgen, wie viele Entit?ten eine bestimmte Variable verwenden. Beim Erstellen einer Variablen in einem PHP -Skript erstellt PHP einen kleinen "Container" namens ZVAL, der aus dem Wert besteht, der der Variablen plus zwei weitere Informationen zugewiesen ist: IS_REF und RefCount. Der ZVAL -Container wird in einer Tabelle gespeichert, und jedes Umfang (Skripte, Funktionen, Methoden usw.) hat eine Tabelle. IS_REF ist ein einfacher wahrer/falscher Wert, der angibt, ob die Variable Teil des Referenzsatzes ist, wodurch PHP feststellt, ob es sich um eine einfache Variable oder eine Referenz handelt. RefCount ist interessanter, da es einen numerischen Wert enth?lt, der angibt, wie viele verschiedene Variablen diesen Wert verwenden. Das hei?t, wenn Sie die Variable $ Dave = 6 definieren, wird RefCount auf 1 gesetzt. Wenn ich $ programmer = $ Dave sage, wird RefCount auf 2 erh?ht. PHP wei?, dass er kein zweites ZVAL für Wert 6 erstellt. Dieser RefCount nimmt ab, wenn das Programm endet, entweder wenn wir den Umfang der Funktion verlassen oder bei Verwendung von UnSet (). Wenn RefCount Null erreicht, wird ZVAL zerst?rt und jeder Ged?chtnis, den es h?lt, wird jetzt befreit. Dies ist natürlich ein einfaches Beispiel für eine einfache Variable. Wenn Sie über ein Array oder Objekt sprechen, ist die Situation viel komplizierter, da mehrere ZREFs für mehrere Elemente im Array erstellt werden, die grundlegende Verarbeitung ist jedoch dieselbe. Wenn wir jedoch Arrays in einem anderen Array verwenden, das h?ufig in komplexeren PHP -Skripten auftritt, treten Probleme auf. In diesem Fall wird der ursprüngliche Array -Wert festgelegt, der RefCount des Arraywerts auf 1 gesetzt, und wenn das Array einem anderen Array zugeordnet ist, wird der RefCount auf 2 erh?ht. Wenn der Verwendungsbereich des zweiten Array endet, wird RefCount durch 1 abgeschlossen. Wir befinden uns jetzt in einer Situation, in der der Wert selbst nicht mehr mit irgendetwas verbunden ist, sondern die RefCount des Containers (ZVAL), die darstellt, dass er immer noch gr??er als Null ist. Das Endergebnis ist, dass der vom ursprünglichen Array dargestellte Speicher nicht befreit wird und diese Speichermenge jetzt für irgendetwas nicht verfügbar ist. Oft denken wir, dass dieser verlorene Speicher klein ist, aber normalerweise nicht der Fall ist. Arrays k?nnen heutzutage sehr gro?e Dinge sein, und es ist besonders problematisch, wenn das Skript ein Daemon oder eine andere Funktion ist, die fast kontinuierlich ausgeführt wird. In diesem Fall kann das resultierende "Speicherleck" katastrophale Konsequenzen für die Leistung und sogar die Betriebsfunktionen des Servers haben.
Der dritte Stock - Formal Müllrecycling
Offensichtlich hat die L?schung, die auf der Referenzzahl basiert, ihre Grenzen, aber zum Glück bietet PHP 5.3 eine weitere Option, um diese Situation zu unterstützen. Der spezifische Fall, den wir m?chten, dass der Zyklus der Müllabfuhr gel?st wird, ist der Fall, in dem ZVAL abnimmt, aber immer noch ungleich Null ist. Grunds?tzlich ist die Schleife, um zu erkennen, welche Werte weiter dekrementiert werden k?nnen, und dann die Werte mit Null freizusetzen. Was tats?chlich passiert, ist, dass PHP alle Root Container (ZVAL) verfolgt. Dies geschieht unabh?ngig davon, ob die Müllsammlung eingeschaltet ist oder nicht (da dies nur tun muss, ohne zu fragen, ob die Müllsammlung eingeschaltet ist oder nicht usw.). Dieser Root -Puffer kann bis zu 10.000 Wurzeln enthalten (feste Gr??e, dies kann jedoch ge?ndert werden). Wenn es sich füllt, beginnt der Müllsammlungsmechanismus mit der Analyse dieses Puffers. Das erste, was die GC -Routine tut, ist, durch den Wurzelpuffer zu iterieren und alle ZVAL -Zahlen um 1 zu verringern. Bei diesem markiert es jedes Tag mit einem kleinen Tag wie einem Scheck einen, so dass es die Wurzel nur einmal verringert. Es iteriert dann und markiert (diesmal mit einer kleinen welligen Linie) alle Zvals, deren reduzierte Anzahl Null ist. Werte, die ungleich Null sind, werden so erh?ht, dass sie zu ihren ursprünglichen Werten zurückkehren. Schlie?lich wird es erneut scrollen, das Zval ungleich Null aus dem Puffer l?schen und den Laden mit dem Wert von Null RefCount befreien. Die Müllsammlung ist in PHP immer aktiviert, aber Sie k?nnen sie mit der Direktive Zend.Enable_gc in der Php.ini -Datei ausschalten. Alternativ k?nnen Sie dies im Skript tun, indem Sie die Funktionen gc_enable () und gc_disable () aufrufen. Wie oben erw?hnt, l?uft es, wenn die Müllsammlung aktiviert ist, ausgeführt, wenn das Root voll ist. Sie k?nnen diese Einstellung jedoch überschreiben und die Sammlung mit der Funktion gc_collect_cycles () ausführen, wenn Sie Fit sehen. Und Sie k?nnen die Gr??e des Stammpuffers mit dem Wert gc_root_buffer_max_entries in Zend/Zend_gc.c im PHP -Quellcode ?ndern. Alles in allem erm?glicht es Ihnen, zu steuern, ob und wann und wo der GC ausgeführt wird, was eine gute Sache ist, weil es ein bisschen ressourcenintensiv ist und daher m?glicherweise nicht die Art von Dingen ist, die Sie nach Belieben laufen.
Wann verwendet es
Da die Müllsammlung die Leistung beeintr?chtigen kann, lohnt es sich, sich die Zeit zu nehmen, um festzustellen, wann Sie sie verwenden sollten. Denken Sie zun?chst daran, dass die formale Müllsammlung nicht ?ffentlich (mit der Funktion gc_collect_cycles ()) ausführt (mit der Funktion gc_collect_cycles ()), vor der Stammtabelle (10.000 Eintr?ge) füllt sich diese Tabelle, und da diese Tabelle auf der Ebene der Umfang ist, ist dies für kleine diese gewonnen. ' T passieren mit Funktionen. Sollten Sie es für kleine Skripte verwenden? Es liegt an Ihnen. Es ist schwer zu sagen, dass laufende Operationen wie Garbage Collection eine schlechte Sache sind, aber wenn Sie kleine, schnell laufende Skripte haben, die beginnen und enden und verschwinden, gibt es m?glicherweise nicht viel Belohnung. Wenn Ihr Server jedoch viele kleine Skripte ausführt, die anhaltend bleiben, kann dies die Mühe wert sein. Die einzige M?glichkeit, wirklich zu wissen, besteht darin, einen Benchmark für Ihre Bewerbung festzulegen und ihn anzusehen. Wenn Sie über langj?hrige Skripte verfügen, insbesondere diejenigen, die niemals enden, ist die Müllsammlung von entscheidender Bedeutung, wenn Sie die oben besprochenen Speicherlecks verhindern m?chten. Am wichtigsten ist vielleicht, dass wir immer versuchen sollten, gute Programmierleitf?den zu folgen, damit wir globale Variablen minimieren oder beseitigen und unsere Variablen an den Geltungsbereich binden, sodass wir, selbst wenn wir langlebige Skripte haben, dieser Speicher am Ende der Funktion befreit werden kann. Nicht am Ende des Skripts. Beachten Sie auch, wann in einem Array ein Array- oder Objektreferenzobjekt verwendet wird, da diese Situation zu Speicherlecks führen kann und das eigentliche Ziel des formalen Müllsammlungsprozesses ist.
Bilder aus Fotolien
Php Müllrecycling FAQ (FAQ)
(Der FAQ-Teil wird hier weggelassen, da der Artikel zu lang ist und nicht mit dem pseudooriginalen Ziel übereinstimmt. Der Inhalt des FAQ kann nach der ?nderung ge?ndert werden.)
Das obige ist der detaillierte Inhalt vonPHP Master | Besser verstehen die Müllsammlung von PHP. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Hei?e KI -Werkzeuge

Undress AI Tool
Ausziehbilder kostenlos

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Clothoff.io
KI-Kleiderentferner

Video Face Swap
Tauschen Sie Gesichter in jedem Video mühelos mit unserem v?llig kostenlosen KI-Gesichtstausch-Tool aus!

Hei?er Artikel

Hei?e Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

H?ufige Probleme und L?sungen für den variablen PHP -Umfang umfassen: 1. Die globale Variable kann innerhalb der Funktion nicht zugegriffen werden, und sie muss bei der Verwendung des globalen Schlüsselworts oder Parameters übergeben werden. 2. Die statische Variable wird statisch deklariert und nur einmal initialisiert und der Wert wird zwischen mehreren Aufrufen beibehalten. 3.. Hyperglobale Variablen wie $ _get und $ _post k?nnen direkt in jedem Bereich verwendet werden, aber Sie müssen auf eine sichere Filterung achten. 4. Die anonymen Funktionen müssen über das Schlüsselwort verwenden, und wenn Sie externe Variablen ?ndern, müssen Sie eine Referenz übergeben. Das Beherrschen dieser Regeln kann dazu beitragen, Fehler zu vermeiden und die Code -Stabilit?t zu verbessern.

Um PHP -Datei -Uploads sicher zu verarbeiten, müssen Sie die Quelle und die Type und die Eingabe des Dateinamens und des Pfades überprüfen, Serverbeschr?nkungen festlegen und Mediendateien zweimal verarbeiten. 1. überprüfen Sie die Upload -Quelle, um CSRF durch Token zu verhindern, und erkennen Sie den realen MIME -Typ über die Finfo_file mithilfe der Whitelist -Steuerung. 2. Benennen Sie die Datei in eine zuf?llige Zeichenfolge um und bestimmen Sie die Erweiterung, um sie gem?? dem Erkennungstyp in einem Verzeichnis ohne Web zu speichern. 3. Die PHP -Konfiguration begrenzt die Hochladengr??e und das tempor?re Verzeichnis Nginx/Apache verbietet den Zugriff auf das Upload -Verzeichnis. 4. Die GD -Bibliothek stellt die Bilder neu, um potenzielle b?swillige Daten zu l?schen.

Es gibt drei g?ngige Methoden für den PHP -Kommentarcode: 1. Verwenden Sie // oder #, um eine Codezeile zu blockieren, und es wird empfohlen, // zu verwenden. 2. Verwenden Sie /.../, um Codebl?cke mit mehreren Zeilen zu wickeln, die nicht verschachtelt werden k?nnen, aber gekreuzt werden k?nnen. 3.. Kombinationskenntnisse Kommentare wie die Verwendung / if () {} / Um Logikbl?cke zu steuern oder um die Effizienz mit Editor -Verknüpfungsschlüssel zu verbessern, sollten Sie auf die Schlie?ung von Symbolen achten und das Verschachteln bei der Verwendung vermeiden.

AgneeratorinphpiSamemory-effizientes WaytoiterateOverlargedatasetsByyieldingValueatimeinsteadofReturningThemallatonce.1.GeneratorsusetheyieldKeywordtoproduktenvaluesonDemand, ReducingMemoryUsage.2.TheyareusefulforfulforfulfordlingBiglopploups, Lesebiglochen, Leselungen, Lesebigs, Leselung, oder

Der Schlüssel zum Schreiben von PHP -Kommentaren liegt in der Kl?rung des Zwecks und der Spezifikationen. Kommentare sollten "Warum" und nicht "was getan" erkl?ren, um Redundanz oder zu Einfachheit zu vermeiden. 1. Verwenden Sie ein einheitliches Format wie Docblock (/*/) für Klassen- und Methodenbeschreibungen, um die Lesbarkeit und die Kompatibilit?t der Werkzeuge zu verbessern. 2. Betonen Sie die Gründe für die Logik, z. B. warum JS -Sprünge manuell ausgeben müssen. 3. Fügen Sie eine übersichtsbeschreibung vor komplexem Code hinzu, beschreiben Sie den Prozess in Schritten und helfen Sie, die Gesamtidee zu verstehen. V. Gute Anmerkungen k?nnen die Kommunikationskosten senken und die Effizienz der Code -Wartung verbessern.

Tolearnphpeffectival, startbysettingupalocalerverenVironmentusexs -LikexamppandacodeeditorikevScode.1) InstallxamppForapache, MySQL und Php.SeacodeeditorForsyntaxSupport.3) testyourscludingveliktingveliktelaThbiliodble.Neclyble.NektFile

In PHP k?nnen Sie quadratische Klammern oder lockige Klammern verwenden, um Zeichenfolgenspezifikationsspezifische Indexzeichen zu erhalten, aber quadratische Klammern werden empfohlen. Der Index startet von 0 und der Zugriff au?erhalb des Bereichs gibt einen Nullwert zurück und kann keinen Wert zugewiesen; MB_SUBSTR ist erforderlich, um Multi-Byte-Zeichen zu verarbeiten. Zum Beispiel: $ str = "Hallo"; echo $ str [0]; Ausgabe H; und chinesische Zeichen wie Mb_Substr ($ str, 1,1) müssen das richtige Ergebnis erzielen. In den tats?chlichen Anwendungen sollte die L?nge der Zeichenfolge vor dem Schleifen überprüft werden, dynamische Zeichenfolgen müssen für die Gültigkeit verifiziert werden, und mehrsprachige Projekte empfehlen, Multi-Byte-Sicherheitsfunktionen einheitlich zu verwenden.

Toinstallphpquickly, usexampponwindowsorhomebrewonmacos.1.onwindows, download undInstallxampp, SelectComponents, Startapache und PlaceFilesinhtdocscs.2.Anternativ, manuellinstallphpfrfr
