La gestion de la mémoire linguistique est un aspect important de la conception du langage. C’est un facteur important dans la détermination des performances linguistiques. Qu’il s’agisse de gestion manuelle en langage C ou de garbage collection en Java, elles sont devenues les fonctionnalités les plus importantes du langage. Nous prenons ici le langage Python comme exemple pour illustrer la méthode de gestion de la mémoire d'un langage orienté objet typé dynamiquement.
Résumé en une phrase : le comptage de références est principalement une marque claire et le recyclage générationnel est auxiliaire (apprentissage recommandé : Vidéo Python Tutoriel)
Le garbage collection de Python (3 types)
Comptage de références
Quand un objet Lorsque le compteur de référence atteint 0, l'objet peut être en mémoire mais n'est plus accessible. Aucune autre opération ne peut être effectuée pendant le garbage collection de Python. Si Python recycle un objet lorsque son nombre de références devient 0, alors évidemment l'efficacité de Python sera très faible. Alors, quand Python le recyclera-t-il ? C'est une bonne question.
Python surveillera le nombre de nouveaux objets qu'il a créés et le nombre de compteurs de référence d'objets devenus 0. La différence entre les deux valeurs sera comparée au seuil. Si elle est supérieure au seuil, la mémoire commencera à être des déchets. Le recyclage détruit les objets avec des compteurs de référence de 0.
Avantages : performances simples en temps réel, inconvénients : maintenir le comptage de références consomme des ressources et des références circulaires.
Recyclage générationnel
Afin d'améliorer l'efficacité, de nombreux objets existent encore après avoir été nettoyés plusieurs fois. On peut considérer que de tels objets n'ont pas besoin de l'être. être recyclé fréquemment et peut être Il est divisé en différentes collections, et chaque collection a des intervalles de recyclage différents. En termes simples, il s'agit du recyclage générationnel de Python.
Pour être précis, les déchets en python sont divisés en 1, 2 et 3 générations. Les objets de la 1ère génération seront nettoyés à chaque fois qu'ils seront recyclés. Lorsque les objets référencés existent toujours après le nettoyage, ils entreront. la collection de deuxième génération. De la même manière, les objets qui existent lors du nettoyage de la collection de deuxième génération entreront dans la collection de deuxième génération.
Comment répartir le temps de nettoyage de chaque collecte ? Les déchets de première génération seront nettoyés en premier après que les déchets de première génération auront été nettoyés 10 fois, les déchets de deuxième génération seront nettoyés une fois. nettoyés 10 fois, les déchets de deuxième génération seront nettoyés.
Marquer comme clair
Allouer à la demande. Lorsque la mémoire n'est pas suffisante, partez du registre et de la référence sur la pile du programme, parcourez l'objet et marquez le. objet traversé. Les objets non marqués sont ensuite effacés de la mémoire.
Pour plus d'articles techniques liés à Python, veuillez visiter la colonne Tutoriel Python pour apprendre !
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!