Maison  >  Article  >  développement back-end  >  Comment Python effectue la gestion de la mémoire

Comment Python effectue la gestion de la mémoire

silencement
silencementoriginal
2019-06-21 10:14:303986parcourir

Comment Python effectue la gestion de la mémoire

Python introduit un mécanisme : le comptage de références pour gérer la mémoire.

Python utilise en interne le comptage de références pour garder une trace des objets en mémoire. Python enregistre en interne le nombre de références d'un objet, c'est-à-dire un nombre de références. Lorsqu'un objet est créé, un nombre de références est créé. . Lorsqu'un objet n'est plus nécessaire et que son nombre de références atteint 0, il est récupéré.

Pour résumer, le nombre de références d'un objet sera augmenté de 1 dans les situations suivantes :

L'objet est créé : x=4

.

2. De plus, d'autres sont créés : y=x

3 Passé en paramètres à la fonction : foo(x)

4. =[1,x,'33']

Réduction du nombre de références

1. Une référence locale sort de sa portée. Par exemple, lorsque la fonction foo(x) ci-dessus se termine, la référence d'objet pointée par x est décrémentée de 1.

2. L'alias de l'objet est explicitement détruit : del x; ou del y

3. Un alias de l'objet est attribué à un autre objet : x=789

4. L'objet est supprimé d'un objet fenêtre : myList.remove(x)

5. L'objet fenêtre lui-même est détruit : del myList, ou l'objet fenêtre lui-même quitte la portée.

Garbage Collection

1. Lorsqu'il y a des parties de la mémoire qui ne sont plus utilisées, le garbage collector les nettoie. Il recherche les objets avec un nombre de références de 0 et efface leur espace mémoire. Bien entendu, en plus du décompte de références de 0 qui est effacé, il existe une autre situation qui sera également effacée par le garbage collector : lorsque deux objets se réfèrent l'un à l'autre, leurs autres références sont déjà à 0.

2. Le mécanisme de collecte des ordures dispose également d'un garbage collector circulaire pour garantir que l'objet de référence circulaire est libéré (a fait référence à b et b fait référence à a, ce qui fait que son nombre de références ne doit jamais être 0).

En Python, la mémoire demandée est souvent constituée de petits blocs de mémoire. Ces petits blocs de mémoire seront libérés peu de temps après l'application. Puisque ces applications de mémoire ne sont pas destinées à créer des objets, elles ne le sont pas. mécanisme de pool de mémoire au niveau. Cela signifie que Python effectuera un grand nombre d'opérations malloc et gratuites pendant le fonctionnement, et basculera fréquemment entre le mode utilisateur et le mode noyau, ce qui affectera sérieusement l'efficacité d'exécution de Python. Afin d'accélérer l'efficacité d'exécution de Python, Python introduit un mécanisme de pool de mémoire pour gérer l'application et la libération de petits blocs de mémoire.

Mécanisme de pool de mémoire

Python fournit un mécanisme de récupération de place pour la mémoire, mais il place la mémoire inutilisée dans le pool de mémoire au lieu de la renvoyer au système d'exploitation.

Tous les objets de taille inférieure à 256 octets en Python utilisent l'allocateur implémenté par pymalloc, tandis que les objets volumineux utilisent le malloc du système. De plus, les objets Python, tels que les entiers, les nombres à virgule flottante et les listes, disposent de leurs propres pools de mémoire privés indépendants, et leurs pools de mémoire ne sont pas partagés entre les objets. Cela signifie que si vous allouez et libérez un grand nombre d'entiers, la mémoire utilisée pour mettre en cache ces entiers ne pourra plus être allouée aux nombres à virgule flottante.

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