1. fonction memory_get_usage
int memory_get_usage ([ bool $real_usage = false ] )
Mémoire utilisée par le script PHP (à l'exclusion de memory_get_usage() Le mémoire occupée par la fonction elle-même)
Le paramètre $real_usage de memory_get_usage() est par défaut FALSE lorsqu'il est défini sur TRUE, la valeur mémoire obtenue est la mémoire occupée par la gestion de la mémoire PHP.
//php分配到的内存 var_dump(memory_get_usage(true)); //php使用内内存 var_dump(memory_get_usage());
Résultat
int 262144
int 239368
Le mécanisme de gestion de la mémoire de PHP est : pré-allouer un espace, Utilisé pour stocker des variables Lorsque l'espace n'est pas suffisant, demandez un nouvel espace.
memory_get_usage(true) est la mémoire pré-allouée.
Je n'ai jamais prêté attention à l'utilisation de la mémoire des pages PHP auparavant. Cette fonction devrait également être utilisée pour analyser le code lors de l'optimisation de la page à l'avenir.
2. Affectation des variables et mémoire
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());
Résultat
int 239776
int 239912
int 240000
int 239912
int 239776
239912-239776=136
240000-239912=88
La mémoire utilisée par les affectations $a et $b est différente. La raison est que l'affectation $b n'alloue pas de mémoire. Ces 88 octets sont occupés par la fonction de sortie.
De plus, la destruction de $b n'affecte pas la mémoire utilisée par $a. C'est la raison du comptage des références de gestion de la mémoire
Vous pouvez clairement comprendre la relation entre l'affectation des variables et la mémoire en changeant. l'exemple
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());
Résultat
int 239816
int 239952
int 240088
int 239952
int 239816
239952 -23 9816= 136
240088-239952=136
De plus, les règles d'utilisation de la mémoire de l'affectation de référence sont similaires à celles de l'affectation directe, qui implique également les règles de comptage de références de gestion de la mémoire
3. Mécanisme de récupération de place PHP, cette partie n'est pas suffisamment comprise, enregistrez simplement une fonction
xdebug_debug_zval. doit installer l'extension xdebug
$a = "Hello World"; xdebug_debug_zval('a');
Output
a:
(refcount=1, is_ref=0),string 'Hello World ' (longueur = 11)
refcount Le nombre de variables pointant vers la valeur
is_ref représente s'il existe une référence d'adresse
Type
Valeur
Lors de l'attribution d'une valeur à une variable : is_ref est faux refcount For 1
Adresse manuelle
Connaissance de base du comptage de références
http:/ /php.net/manual/zh/features.gc.refcounting-basics.php
Chaque variable php est stockée dans un conteneur de variables appelé "zval". Un conteneur de variable zval contient, en plus du type et de la valeur de la variable, deux octets d'informations supplémentaires. Le premier est "is_ref", qui est une valeur booléenne utilisée pour identifier si cette variable appartient à l'ensemble de référence. Grâce à cet octet, le moteur PHP peut distinguer les variables ordinaires des variables de référence. Puisque PHP permet aux utilisateurs d'utiliser des références personnalisées en utilisant &, il existe également un mécanisme de comptage de références interne dans le conteneur de variables zval pour optimiser l'utilisation de la mémoire. Le deuxième octet supplémentaire est "refcount", qui est utilisé pour indiquer le nombre de variables (également appelées symboles) pointant vers ce conteneur de variables zval. Tous les symboles existent dans une table de symboles, où chaque symbole a une portée (scope), le script principal (par exemple : le script demandé via le navigateur) et chaque fonction ou méthode ont également une portée.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!