Maison >développement back-end >Problème PHP >Qu'est-ce que le mécanisme de gestion de la mémoire PHP et le mécanisme de garbage collection ?

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

王林
王林avant
2019-08-24 10:14:462520parcourir

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());   //删除变量后获取内存

Résultat de sortie :

int 262144
int 262144
int 262144

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());

Résultat de sortie :

int 240040
int 257680
int 240856

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;

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;

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;

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!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer