Cet article vous présentera le garbage collection, analysera brièvement le mécanisme de garbage collection en PHP et enfin parlera de l'impact du garbage collection sur les performances.
Je crois que les étudiants qui ont appris un peu le développement savent que quel que soit le langage de programmation, une variable sera stockée en mémoire. En fait, nous, les développeurs, manipulons constamment la mémoire. En conséquence, si nous continuons à ajouter de nouvelles variables, la mémoire continuera d'augmenter. S'il n'y a pas de bon mécanisme, la mémoire augmentera sans limite et finira par être pleine. Cela provoque une fuite de mémoire. Mais dans le développement quotidien, à moins qu'un gros fichier ne soit chargé à la fois, nous ne voyons presque jamais d'erreurs de dépassement de mémoire. C'est le rôle du mécanisme de récupération de place.
Lorsque nous utilisons le langage C, nous devons utiliser manuellement free pour libérer de la mémoire. La plupart des langages de programmation après C seront dotés d'une capacité de traitement telle que le garbage collection, qui est le mécanisme de garbage collection dont nous allons parler aujourd'hui. , également connu sous le nom de GC. Dans les langages de développement dotés de capacités GC, nous n'avons pas besoin de nous soucier du moment où libérer de la mémoire, et nous n'avons même pas besoin de comprendre le contenu de cet article, car ces langages ont déjà géré le problème de libération de mémoire pour nous au niveau inférieur.
Bien sûr, le contenu le plus connu dans ce domaine est le mécanisme de récupération de place en Java. En fait, PHP dispose également d'un mécanisme de traitement correspondant. Bien sûr, de nombreux PHP n'y ont peut-être jamais été exposés. .
Dans l'article précédent, nous avons introduit le concept de comptage de références. Avant PHP5.3, le mécanisme de récupération de place de PHP était très simple : il consistait à nettoyer et à recycler tous les éléments avec un refcount de 0, ce qui était gratuit au niveau inférieur. Mais cette méthode posera un problème, qui est la référence circulaire dont nous avons parlé dans l'article sur le comptage de références. Ce type de problème de référence ne peut pas être recyclé par le jugement ordinaire du refcount. Ainsi, avant PHP5.3, les références circulaires provoquaient des fuites de mémoire.
La raison pour laquelle j'insiste sur la version est qu'après la version 5.3, PHP a amélioré l'algorithme de récupération de place et résolu cette référence circulaire. (Bien sûr, nous essayons d’éviter ce genre de problème de référence circulaire dans le développement quotidien). Pour l'algorithme spécifique, nous citons la photo officielle :
Il y a une explication détaillée dans le document officiel, mais cela vous laisse toujours confus. Utilisons un langage simple (langage humain) pour décrire ce processus.
Tout d'abord, nous avons le concept de tampon racine, qui est la racine dans l'image. Au niveau le plus bas, grâce à une série d’algorithmes incompréhensibles, nous pouvons trouver une racine possible de chaque variable. PHP mettra les racines possibles de la variable dans le tampon racine.
Lorsque le tampon racine est plein, la valeur par défaut est généralement 10000. Vous devez modifier le code source et recompiler pour modifier cette valeur. PHP démarrera le mécanisme de récupération de place, recherchera toutes les variables liées à cette racine possible à partir du tampon racine selon l'algorithme de traversée en profondeur, réduira de 1 le refcount de la variable trouvée par une certaine racine possible et fera une marque à marquer l'actuel.
Ensuite, traversez à nouveau la profondeur. Si refcount n'est pas 0, ajoutez 1. S'il est 0, laissez-le inchangé.
Ensuite, effacez toutes les racines possibles dans le tampon racine, en effaçant plutôt qu'en supprimant. Ensuite, nettoyez et libérez tout le contenu des variables avec un refcount de 0.
Êtes-vous déjà confus ? En fait, je suis tellement confus que je ne sais même pas comment ce paragraphe a été écrit....
N'oubliez pas quelques points clés et vous pourrez gérer l'interview et tuer la plupart des gens instantanément.
Apprentissage recommandé : "
Tutoriel vidéo PHPCe 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!