Maison  >  Article  >  développement back-end  >  Analyse de cas d'utilisation du mécanisme de récupération de place PHP

Analyse de cas d'utilisation du mécanisme de récupération de place PHP

php中世界最好的语言
php中世界最好的语言original
2018-05-18 10:18:271196parcourir

Cette fois, je vais vous présenter une analyse de cas d'utilisation du mécanisme de garbage collection PHP. Quelles sont les précautions lors de l'utilisation du mécanisme de garbage collection PHP. Ce qui suit est un cas pratique, prenons un. regarder.

1. Lorsque chaque variable est définie, elle est stockée dans un conteneur appelé zval, qui contient le type et la valeur de la quantité, ainsi qu'un refcount (compris comme le nombre de variables) et is_ref (compris comme le nombre de variables). comme s'il s'agit d'une variable de référence) contient deux informations supplémentaires. Lorsque la variable est référencée une fois, le refcount sera +1. Lorsque vous la désinitialisez, la valeur sera réduite de 1 jusqu'à ce qu'elle soit 0 et elle sera supprimée du. mémoire

2. Lorsque vous définissez une variable, elle n'étendra pas la valeur prédéterminée à chaque fois, car PHP occupera un espace dans la mémoire, et elle vous sera allouée lorsque vous déclarerez la variable, mais lorsque vous dépassez cet espace préoccupé. Après cela, cela augmentera l'espace, mais lorsque vous supprimez la variable, la capacité d'espace ne disparaîtra pas immédiatement

3. La référence de la variable n'augmentera pas la mémoire utilisation seule, elle pointera vers la structure zval Body , juste refcount+1

4 Pour faire simple, la variable de PHP s'appuie sur une implémentation interne du. symbol_table table de symboles, et l'implémentation de base de la table de symboles est HashTable, c'est-à-dire qu'elle est cohérente avec l'implémentation de base du tableau PHP. C'est vraiment grâce à l'existence de la table des symboles que nous pouvons utiliser global pour marquer les variables globales et utiliser des fonctions telles que compact pour extraire directement les variables de la table des symboles actuelle.

Voyons si unset($a) libérera l'espace immédiatement. La réponse est non. Unset prend en charge la suppression de l'élément nommé a de la table des symboles (il marque simplement que l'espace est à nouveau disponible au lieu de le libérer). espace).

Parlons de la situation de mise à jour répétée de $key dans une boucle. Parce que les variables portant le même nom sont mises à jour, elles sont le même élément dans la table des symboles. Lors de la mise à jour, la même position sera mise à jour. et la valeur de l'élément précédent sera mise à jour. Elle a été immédiatement couverte.

Parlons du problème selon lequel la mémoire augmentera si de nouvelles variables sont déclarées. La réponse est incertaine. Cela est dû à la fonctionnalité de la table de symboles implémentée sur la base de HashTable. HashTable ne demande pas de mémoire pour un élément lors de l'ajout d'un élément, mais s'applique à la mémoire pour plusieurs éléments à la fois (seules ces marques de position sont inutilisées). plein, Quand, demande une nouvelle mémoire pour plusieurs éléments. C'est-à-dire que lorsque nous déclarons ou attribuons une variable, si elle n'est pas dans la table des symboles, PHP l'ajoutera à la table des symboles. Si la table des symboles n'est pas pleine à ce moment-là, il utilisera la table des symboles qui l'a. a été demandée mais non utilisée, si la table des symboles est juste pleine, une nouvelle mémoire sera appliquée pour le stockage, et la nouvelle mémoire n'est pas seulement aussi petite que la mémoire requise pour cette variable

Je vous crois. J'ai maîtrisé la méthode après avoir lu le cas dans cet article , pour un contenu plus passionnant, veuillez faire attention aux autres articles connexes sur le site Web chinois de php !

Lecture recommandée :

Explication détaillée des étapes pour implémenter le cryptage à clé publique à l'aide de l'extension PHP+openssl

PHP RSA Étapes de cryptage et de déchiffrement du texte chiffré Explication détaillé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!

Déclaration:
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