Comprensión profunda del mecanismo de recolección de basura de Python

¿Cuál es el mecanismo de recolección de basura en python? Por favor, siéntese y explique brevemente. Las preguntas que harán la mayoría de las entrevistas. Hoy les explicaré brevemente en base a lo que entiendo.

mecanismo de recogida de basura

¡La recolección de basura se basa principalmente en el recuento de referencia, complementado con la eliminación de marcas y el reciclaje generacional!

En este momento intervienen tres puntos técnicos, conteo de referencias, borrado de marcas y reciclaje generacional

 

recuento de referencia

Siempre que cree un objeto, se generará un ob_refcnt en la capa inferior, que es el recuento de referencia del objeto. Cada vez que haga referencia al objeto, su recuento de referencia aumentará en 1

un = 1

b = un 

a tiene una cuenta de referencia de 2

Cuando se usa del b

Es para eliminar un recuento de referencia B. En este momento, el recuento de referencia de a es 1. Cuando el recuento de referencia es 0, se realizará la recolección de elementos no utilizados, se destruirá el objeto y se liberará la memoria.

Sin embargo, existen errores en el conteo de referencias, es decir, pérdidas de memoria causadas por referencias circulares. ¿Cómo solucionarlos? En este momento, se trata de limpieza de marcas y reciclaje generacional.

#循环引用代码示范

v1 = [11,22,33]
v2 = [44,55,66]

v1.append(v2)
v2.append(v1)

del v1
del v2

marcar claro

El borrado de marcas se utiliza para resolver el problema de las referencias circulares.

El principio es abrir una nueva dirección en python para almacenar objetos que pueden tener referencias circulares y buscar posibles problemas en ciertas circunstancias, no solo para escanear y verificar el objeto original, sino también sus objetos secundarios. , si hay una referencia circular, si es así, decrementa su conteo de referencias en 1, si el conteo de referencias es 0, se recolectará como basura, si no es 0, se seguirá colocando en la memoria. En resumen, recorre cada objeto y los elementos secundarios del objeto.

Aquí mencioné que está bien escanear bajo ciertas circunstancias, ¡y habrá dos problemas en este momento! ! !

1. Cuándo escanear

2. Alto costo por escaneo

Estas dos preguntas pueden introducir otro tema ----- reciclaje generacional

reciclaje generacional

El reciclaje generacional, como su nombre indica, divide los objetos que pueden tener referencias circulares en generaciones, es decir, generación 0, generación 1 y generación 2

¿Con qué frecuencia escaneas?

Generación 0: el número de objetos en la generación 0 es igual a 700 escaneos

Generación 1: los objetos de la generación 0 se escanean 10 veces y los objetos de la generación 1 se escanean una vez

Generación 2: los objetos de la generación 1 se escanean 10 veces y los objetos de la generación 2 se escanean una vez

A continuación, describa brevemente el proceso.

Siempre que exista la posibilidad de objetos de referencia circular, la generación 0 se agrega de manera predeterminada. Cuando el número de objetos en la generación 0 es 700, se escanearán todos los objetos en la generación 0. Si no hay problema, únase a la generación 1. , y si hay un problema de reciclaje, cuando el número de escaneos en la generación 0 es 10, se escaneará la primera generación y los que no tengan problemas se colocarán en la segunda generación. Cuando el número de escaneos en la primera generación sea 10, la segunda generación escaneará!

Este es un principio subyacente del reciclaje generacional.

Supongo que te gusta

Origin blog.csdn.net/qwertyu111j/article/details/126003015
Recomendado
Clasificación