Cet article de vous présenter le contenu parle de PHP dans l’analyse de référence et de garbage collection, il y a une certaine valeur de référence, il n’y a que besoin d’amis peut faire référence à, j’espère pouvoir vous aider.
Il existe pour chaque variable PHP dans une variable appelée « Zval ». Un conteneur Zval variable qui comprend deux octets des informations supplémentaires en plus du type et la valeur de la variable. La première est « Is_ref », qui est une valeur bool qui indique si la variable appartient à la collection de référence (référence ensemble). Avec cet octet, le moteur PHP peut distinguer entre variables ordinaires et référencées et parce que PHP permet aux utilisateurs d’utiliser des références personnalisées en utilisant la Zval, il y a aussi un mécanisme dans le conteneur pour optimiser l’utilisation de la mémoire dans l’ordre de décompte de références interne. Le deuxième octet supplémentaire est « RefCount », qui représente le nombre de variables (également connu sous le nom de symbole) qui pointent vers le conteneur Zval. Tous les symboles existent dans une table de symboles, où chaque symbole a une portée, et ces scripts principales (par exemple, les scripts demandé via le navigateur) et chaque fonction ou une méthode ont aussi étendues.
Objets en PHP sont passés comme références
Is_ref = 0, refcount = 0 conteneur zval est détruite à la fin de l’exécution du script
Citant l’exemple de l’officiel
<?php$a = array( 'one' );$a[] =& $a;xdebug_debug_zval( 'a' );
a: (refcount=2, is_ref=1)=array ( 0 => (refcount=1, is_ref=0)='one', 1 => (refcount=2, is_ref=1)=...)
L’exécution unset$ un libère les variables associées à mémoire zval, mais la boucle fermée lui-même existe toujours à l’intérieur
(refcount=1, is_ref=1)=array ( 0 => (refcount=1, is_ref=0)='one', 1 => (refcount=1, is_ref=1)=...)
Mais à ce stade, il n’y a pas de variables pour l’exploitation dans le temps de conteneur Zval, qui est devenue la poubelle de la mémoire et ne peut être enclenché.
Mécanisme de recyclage : Autrement dit, après avoir exécuté le script, l’ensemble des données des variables restantes sont tout refcount-1 si elle est réduite à 0, la destruction de conteneur de mémoire est déterminée pour la poubelle.