Heim Backend-Entwicklung PHP-Tutorial Analyse von Referenzen und Garbage Collection in PHP

Analyse von Referenzen und Garbage Collection in PHP

Sep 04, 2018 pm 05:43 PM
垃圾回收 引用

Der Inhalt dieses Artikels befasst sich mit der Analyse von Referenzen und der Speicherbereinigung in PHP. Ich hoffe, dass er für Freunde hilfreich ist.

Jede PHP-Variable wird in einem Variablencontainer namens „zval“ gespeichert. Ein zval-Variablencontainer enthält zusätzlich zum Typ und Wert der Variablen zwei Bytes zusätzlicher Informationen. Der erste ist „is_ref“, ein Bool-Wert, der verwendet wird, um zu identifizieren, ob diese Variable zum Referenzsatz gehört. Durch dieses Byte kann die PHP-Engine gewöhnliche Variablen von Referenzvariablen unterscheiden. Da PHP Benutzern die Verwendung benutzerdefinierter Referenzen durch die Verwendung von & ermöglicht, gibt es im zval-Variablencontainer auch einen internen Referenzzählmechanismus, um die Speichernutzung zu optimieren. Das zweite zusätzliche Byte ist „refcount“, das verwendet wird, um die Anzahl der Variablen (auch Symbole genannt) anzugeben, die auf diesen zval-Variablencontainer verweisen. Alle Symbole existieren in einer Symboltabelle, wobei jedes Symbol einen Gültigkeitsbereich (Scope) hat, das Hauptskript (z. B. das über den Browser angeforderte Skript) und jede Funktion oder Methode ebenfalls einen Gültigkeitsbereich haben.

//Objekte in PHP werden als Referenz übergeben

is_ref = 0, refcount = 0 zval-Container wird am Ende der Skriptausführung zerstört

Zitat des offiziellen Beispiels

<?php
$a = array( &#39;one&#39; );
$a[] =& $a;
xdebug_debug_zval( &#39;a&#39; );
Nach dem Login kopieren
a: (refcount=2, is_ref=1)=array (
   0 => (refcount=1, is_ref=0)=&#39;one&#39;,
   1 => (refcount=2, is_ref=1)=...
)
Nach dem Login kopieren

自引用(curcular reference,自己是自己的一个元素)的数组的zval

Durch die Ausführung von unset$a wird die Speicherzuordnung zwischen der Variablen und zval freigegeben, die geschlossene Schleife selbst existiert jedoch weiterhin

(refcount=1, is_ref=1)=array (
   0 => (refcount=1, is_ref=0)=&#39;one&#39;,
   1 => (refcount=1, is_ref=1)=...
)
Nach dem Login kopieren

Zvals after removal of array with a circular reference demonstrating the memory leak

Aber zu diesem Zeitpunkt können keine Variablen in den ZVAL-Container manipuliert werden. Zu diesem Zeitpunkt ist er zu Speichermüll geworden und kann nicht freigegeben werden Recycling-Mechanismus: Vereinfacht ausgedrückt werden nach der Ausführung des Skripts alle vorhandenen Variablen refcount -1 für die Gesamtdaten, wenn sie auf 0 reduziert werden, werden sie als Müll beurteilt und der Speichercontainer wird zerstört

Verwandte Empfehlungen:

Welche Art von Müll kann durch den Garbage Collection-Mechanismus von PHP recycelt werden? PHP-Garbage-Collection-Mechanismus – Grundkenntnisse der Referenzzählung

Das obige ist der detaillierte Inhalt vonAnalyse von Referenzen und Garbage Collection in PHP. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
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

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Wie man alles in Myrise freischaltet
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

So verwenden Sie Anführungszeichen in Apple Notes So verwenden Sie Anführungszeichen in Apple Notes Oct 12, 2023 pm 11:49 PM

In iOS 17 und macOS Sonoma hat Apple neue Formatierungsoptionen für Apple Notes hinzugefügt, darunter Anführungszeichen und einen neuen Monostyle-Stil. Hier erfahren Sie, wie Sie sie verwenden. Mit zusätzlichen Formatierungsoptionen in Apple Notes können Sie Ihren Notizen jetzt Anführungszeichen hinzufügen. Das Format der Blockzitate erleichtert das visuelle Versetzen von Textabschnitten mithilfe der Anführungszeichenleiste links vom Text. Tippen/klicken Sie einfach auf die Formatschaltfläche „Aa“ und wählen Sie die Option „Blockzitat“ aus, bevor Sie etwas eingeben oder wenn Sie sich in der Zeile befinden, die Sie in ein Blockzitat umwandeln möchten. Diese Option gilt für alle Texttypen, Stiloptionen und Listen, einschließlich Checklisten. Im selben Menü „Format“ finden Sie die neue Option „Einzelstil“. Dies ist eine Überarbeitung der vorherigen „gleichbreiten“

So vermeiden Sie Speicherlecks bei der C#-Entwicklung So vermeiden Sie Speicherlecks bei der C#-Entwicklung Oct 08, 2023 am 09:36 AM

Um Speicherlecks bei der C#-Entwicklung zu vermeiden, sind spezifische Codebeispiele erforderlich. Speicherlecks sind eines der häufigsten Probleme im Softwareentwicklungsprozess, insbesondere bei der Entwicklung mit der Sprache C#. Speicherlecks führen dazu, dass Anwendungen immer mehr Speicherplatz beanspruchen, was schließlich dazu führt, dass das Programm langsamer läuft oder sogar abstürzt. Um Speicherlecks zu vermeiden, müssen wir auf einige häufig auftretende Probleme achten und entsprechende Maßnahmen ergreifen. Rechtzeitige Freigabe von Ressourcen In C# müssen Ressourcen rechtzeitig nach ihrer Verwendung freigegeben werden, insbesondere wenn es um Ressourcen wie Dateivorgänge, Datenbankverbindungen und Netzwerkanforderungen geht. Kann

Häufige Speicherverwaltungsprobleme und Lösungen in C# Häufige Speicherverwaltungsprobleme und Lösungen in C# Oct 11, 2023 am 09:21 AM

Häufige Speicherverwaltungsprobleme und -lösungen in C# sind erforderlich. Bei der C#-Entwicklung ist eine falsche Speicherverwaltung ein wichtiges Thema, das zu Speicherlecks und Leistungsproblemen führen kann. In diesem Artikel werden die Leser mit häufigen Speicherverwaltungsproblemen in C# vertraut gemacht, Lösungen bereitgestellt und spezifische Codebeispiele gegeben. Ich hoffe, es kann den Lesern helfen, die Speicherverwaltungstechnologie besser zu verstehen und zu beherrschen. Der Garbage Collector gibt Ressourcen nicht rechtzeitig frei. Der Garbage Collector (GarbageCollector) in C# ist dafür verantwortlich, Ressourcen automatisch freizugeben und nicht mehr zu verwenden.

C++-Kompilierungsfehler: undefinierte Referenz, wie kann man ihn lösen? C++-Kompilierungsfehler: undefinierte Referenz, wie kann man ihn lösen? Aug 21, 2023 pm 08:52 PM

C++ ist eine beliebte Programmiersprache, aber während der Verwendung tritt häufig der Kompilierungsfehler „undefinierte Referenz“ auf, der große Probleme bei der Programmentwicklung mit sich bringt. In diesem Artikel wird die Lösung des Fehlers „Undefinierte Referenz“ sowohl hinsichtlich der Ursache als auch der Lösung erläutert. 1. Fehlerursache Wenn der C++-Compiler eine Quelldatei kompiliert, wird diese in zwei Phasen unterteilt: die Kompilierungsphase und die Verknüpfungsphase. Die Kompilierungsphase wandelt den Quellcode in den Quelldateien in Assemblercode um, während die Verknüpfungsphase verschiedene Quelldateien zu einer ausführbaren Datei kombiniert.

Welche Beziehung besteht zwischen Speicherverwaltungstechniken und Sicherheit in Java-Funktionen? Welche Beziehung besteht zwischen Speicherverwaltungstechniken und Sicherheit in Java-Funktionen? May 02, 2024 pm 01:06 PM

Die Speicherverwaltung in Java umfasst die automatische Speicherverwaltung, wobei Garbage Collection und Referenzzählung zum Zuweisen, Verwenden und Freigeben von Speicher verwendet werden. Eine effektive Speicherverwaltung ist für die Sicherheit von entscheidender Bedeutung, da sie Pufferüberläufe, wilde Zeiger und Speicherlecks verhindert und so die Sicherheit Ihres Programms verbessert. Durch die ordnungsgemäße Freigabe nicht mehr benötigter Objekte können Sie beispielsweise Speicherlecks vermeiden, wodurch die Programmleistung verbessert und Abstürze verhindert werden.

Welche Vorteile haben C++-Funktionen, die Referenztypen zurückgeben? Welche Vorteile haben C++-Funktionen, die Referenztypen zurückgeben? Apr 20, 2024 pm 09:12 PM

Zu den Vorteilen von Funktionen, die Referenztypen in C++ zurückgeben, gehören: Leistungsverbesserungen: Durch die Übergabe als Referenz wird das Kopieren von Objekten vermieden, wodurch Speicher und Zeit gespart werden. Direkte Änderung: Der Aufrufer kann das zurückgegebene Referenzobjekt direkt ändern, ohne es neu zuzuweisen. Einfachheit des Codes: Die Übergabe als Referenz vereinfacht den Code und erfordert keine zusätzlichen Zuweisungsvorgänge.

Wie verwende ich C++-Referenz- und Zeigerparameterübergabe? Wie verwende ich C++-Referenz- und Zeigerparameterübergabe? Apr 12, 2024 pm 10:21 PM

Referenzen und Zeiger sind in C++ beide Methoden zur Übergabe von Funktionsparametern, es gibt jedoch Unterschiede. Eine Referenz ist ein Alias ​​für eine Variable. Durch Ändern der Referenz wird die ursprüngliche Variable geändert, während der Zeiger die Adresse der Variablen speichert. Wenn Sie sich für die Verwendung einer Referenz oder eines Zeigers entscheiden, müssen Sie Faktoren berücksichtigen, z. B. ob die ursprüngliche Variable geändert werden muss, ob ein Nullwert übergeben werden muss, und Leistungsaspekte.

Speicherverwaltungsprobleme und Lösungen, die bei der Python-Entwicklung auftreten Speicherverwaltungsprobleme und Lösungen, die bei der Python-Entwicklung auftreten Oct 09, 2023 pm 09:36 PM

Zusammenfassung der Speicherverwaltungsprobleme und -lösungen, die bei der Python-Entwicklung auftreten: Im Python-Entwicklungsprozess ist die Speicherverwaltung ein wichtiges Thema. In diesem Artikel werden einige häufig auftretende Speicherverwaltungsprobleme erläutert und entsprechende Lösungen vorgestellt, darunter Referenzzählung, Speicherbereinigungsmechanismus, Speicherzuweisung, Speicherlecks usw. Es werden spezifische Codebeispiele bereitgestellt, um den Lesern zu helfen, diese Probleme besser zu verstehen und zu lösen. Referenzzählung Python verwendet die Referenzzählung, um den Speicher zu verwalten. Die Referenzzählung ist eine einfache und effiziente Speicherverwaltungsmethode, die alle aufzeichnet

See all articles