Maison > Article > développement back-end > Récupération de place intégrée à PHP
Cette fois, je vous présente le garbage collection intégré de PHP. Quelles sont les précautions pour le garbage collection intégré de PHP Voici des cas pratiques, jetons un coup d'œil ?
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 à usage seul, il pointera vers la structure zval Body , juste refcount+1
4 Pour faire simple, La variable PHP s'appuie sur une implémentation interne de symbol_table. table des symboles, et l'implémentation de base de la table des 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 suffit de le marquer. 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 du déploiement de mysqld_multi sur une seule machine
La raison pour laquelle l'installation du service mysql n'a pas réussi à démarrer
Utilisez AngularJS pour obtenir le mot de passe sur l'interface frontale
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!