Références en PHP et analyse de garbage collection

Source : Internet
Auteur : utilisateur
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.

Nous contacter

Le contenu de cette page provient d'Internet et ne reflète pas l'opinion d'Alibaba Cloud ; les produits et services mentionnés sur cette page n'ont aucune relation avec Alibaba Cloud. Si le contenu de la page vous semble problématique, veuillez nous écrire un courriel, nous traiterons le problème dans les 5 jours suivant la réception de votre message.

Si vous constatez des cas de plagiat de la part de la communauté, veuillez envoyer un courriel à : info-contact@alibabacloud.com et fournir des preuves pertinentes. Un membre de notre équipe vous contactera dans les 5 jours ouvrables.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.