1. Funktion „memory_get_usage“
int memory_get_usage ([ bool $real_usage = false ] )
Vom PHP-Skript verwendeter Speicher (ausgenommen „memory_get_usage()“) Speicher, der von der Funktion selbst belegt wird)
Der Parameter $real_usage von memory_get_usage() ist standardmäßig auf FALSE gesetzt; wenn er auf TRUE gesetzt ist, ist der erhaltene Speicherwert der von der PHP-Speicherverwaltung belegte Speicher.
//php分配到的内存 var_dump(memory_get_usage(true)); //php使用内内存 var_dump(memory_get_usage());
Ergebnis
int 262144
int 239368
Der Speicherverwaltungsmechanismus von PHP ist: Vorab einen Speicherplatz zuweisen, Wird zum Speichern von Variablen verwendet. Wenn der Speicherplatz nicht ausreicht, beantragen Sie einen neuen Speicherplatz.
memory_get_usage(true) ist der vorab zugewiesene Speicher.
Ich habe noch nie auf die Speichernutzung von PHP-Seiten geachtet. Diese Funktion sollte in Zukunft auch zur Analyse des Codes bei der Optimierung der Seite verwendet werden.
2. Variablenzuweisung und Speicher
var_dump(memory_get_usage()); $a = "Hello World"; var_dump(memory_get_usage()); $b = $a; var_dump(memory_get_usage()); unset($b); var_dump(memory_get_usage()); unset($a); var_dump(memory_get_usage());
Ergebnis
int 239776
int 239912
int 240000
int 239912
int 239776
239912-239776=136
240000-239912=88
Der von $a- und $b-Zuweisungen verwendete Speicher ist unterschiedlich. Der Grund dafür ist, dass die $b-Zuweisung keinen Speicher zuweist. Diese 88 Bytes werden von der Ausgabefunktion belegt.
Außerdem wirkt sich die Zerstörung von $b nicht auf den von $a verwendeten Speicher aus. Dies ist der Grund für die Referenzzählung der Speicherverwaltung
Sie können die Beziehung zwischen Variablenzuweisung und Speicher durch Ändern klar verstehen das Beispiel
var_dump(memory_get_usage()); $a = "Hello World"; var_dump(memory_get_usage()); $b = "Hello World"; var_dump(memory_get_usage()); unset($b); var_dump(memory_get_usage()); unset($a); var_dump(memory_get_usage());
Ergebnis
int 239816
int 239952
int 240088
int 239952
int 239816
239952 -23 9816= 136
240088-239952=136
Darüber hinaus ähneln die Speichernutzungsregeln der Referenzzuweisung denen der direkten Zuweisung, die Beinhaltet auch die Referenzzählregeln der Speicherverwaltung
3. Der PHP-Garbage-Collection-Mechanismus ist nicht tief genug verstanden, einfach eine Funktion aufzeichnen
xdebug_debug_zval muss die xdebug-Erweiterung installieren
$a = "Hello World"; xdebug_debug_zval('a');
Output
a:
(refcount=1, is_ref=0),string 'Hello World ' (Länge=11)
refcount Die Anzahl der Variablen, die auf den Wert zeigen
is_ref gibt an, ob eine Adressreferenz vorhanden ist
Typ
Wert
Beim Zuweisen eines Werts zu einer Variablen: is_ref ist false refcount Für 1
Manuelle Adresse
Grundkenntnisse der Referenzzählung
http:/ /php.net/manual/zh/features.gc.refcounting-basics.php
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 boolescher Wert, der angibt, 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.
Das obige ist der detaillierte Inhalt vonStudiennotizen zu PHP-Variablen und Speicherverwaltung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!