Qu'est-ce que le mécanisme de gestion de la mémoire PHP et le mécanisme de garbage collection ?

王林
Libérer: 2023-02-23 10:52:01
avant
2499 Les gens l'ont consulté

Mécanisme de gestion de la mémoire PHP

var_dump(memory_get_usage());   //获取内存
$a = "laruence";                //定义一个变量
var_dump(memory_get_usage());   //定义变量之后获取内存
unset($a);                      //删除该变量
var_dump(memory_get_usage());   //删除变量后获取内存
Copier après la connexion

Résultat de sortie :

int 262144
int 262144
int 262144
Copier après la connexion

Comme le montre ce qui précède, le mécanisme de gestion de la mémoire de PHP est : pré-donné Créer un espace pour stocker les variables Lorsque l'espace n'est pas suffisant, demander un nouvel espace.

1. Stockez les noms de variables et disposez de tables de symboles.

2. Les valeurs des variables sont stockées dans l'espace mémoire.

3. Lors de la suppression d'une variable, l'espace où la valeur de la variable est stockée sera libéré, mais la table des symboles où se trouve le nom de la variable ne sera pas réduite.

var_dump(memory_get_usage());  //获取内存
//定义100个变量
for($i=0;$i<100;$i++)
{
    $a = "test".$i;
    $$a = "hello";
}
//获取定义100个变量之后的内存
var_dump(memory_get_usage());
//定义100个变量并删除
for($i=0;$i<100;$i++)
{
    $a = "test".$i;
    unset($$a);
}
//获取删除之后的内存
var_dump(memory_get_usage());
Copier après la connexion

Résultat de sortie :

int 240040
int 257680
int 240856
Copier après la connexion

Comme le montre ce qui précède, bien que la mémoire devienne plus petite après la suppression, elle est toujours plus grande qu'avant que la variable ne soit pas définie En effet, bien que la valeur de la variable soit supprimée, le nom de la variable n'est pas supprimé.

Mécanisme de récupération de place php

Le stockage des variables PHP est stocké dans un conteneur zval

1 Type 2. Valeur 3. is_ref représente s'il existe une référence d'adresse 4. refcount. Le nombre de variables pointant vers la valeur

1 Lors de l'attribution d'une variable : is_ref est faux et refcount est 1

$a = 1;
xdebug_debug_zval(&#39;a&#39;);echo PHP_EOL;
Copier après la connexion

Quest-ce que le mécanisme de gestion de la mémoire PHP et le mécanisme de garbage collection ?

2. variable a à variable b, la variable b ne stockera pas la valeur dans la mémoire immédiatement, mais pointe d'abord vers la valeur de la variable a jusqu'à ce qu'il y ait une opération sur la variable a

$b = $a;
xdebug_debug_zval(&#39;a&#39;);echo PHP_EOL;
Copier après la connexion

Quest-ce que le mécanisme de gestion de la mémoire PHP et le mécanisme de garbage collection ?

3. Parce que le programme exploite à nouveau la variable a, la variable b demandera un morceau de mémoire et y mettra la valeur. Par conséquent, le refcount dans le conteneur zavl de la variable a diminuera de 1 et deviendra 1, et la variable c pointe vers a, donc le refcount augmentera de 1 et deviendra 2

$c = &$a;
xdebug_debug_zval(&#39;a&#39;);echo PHP_EOL;
xdebug_debug_zval(&#39;b&#39;);echo PHP_EOL;
Copier après la connexion

Quest-ce que le mécanisme de gestion de la mémoire PHP et le mécanisme de garbage collection ?

Collecte des déchets :

1. Dans la version 5.2 ou antérieure, PHP jugera s'il s'agit d'un déchet en fonction de la valeur refcount

Si la valeur refcount est 0. , PHP le publiera comme poubelle

Ce mécanisme de recyclage est défectueux et les variables avec des références circulaires ne peuvent pas être recyclées

2 Le mécanisme de collecte des ordures a été amélioré dans les versions après 5.3

<.>S'il s'avère que le refcount dans un conteneur zval augmente, indiquant qu'il ne s'agit pas d'une poubelle

S'il s'avère que le refcount dans un conteneur zval diminue, s'il est réduit à 0, il sera directement traité comme un garbage collection

S'il s'avère que le nombre de refcount dans un conteneur zval diminue, il n'a pas été diminué à 0, PHP mettra la valeur dans le tampon comme objet suspect possible de. ordures.

Lorsque le tampon atteint la valeur critique, PHP appellera automatiquement une méthode pour parcourir chaque valeur. S'il s'avère qu'il s'agit d'un déchet, nettoyez-le.

Pour plus de questions connexes, veuillez visiter le site. Site Web PHP chinois :

Tutoriel vidéo pratique PHP

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!

Étiquettes associées:
source:cnblogs.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal