O que é e como funciona o Garbage Collector em Python

Larissa Sales
2 min readSep 28, 2020

--

https://realpython.com/python-memory-management/

A maioria das linguagens interpretadas e baseadas em máquinas virtuais possuem Garbage collector (coletor de lixo).

Garbage collector (GC) é um processo usado para automação do gerenciamento de memória, com ele é possível recuperar uma área de memória inutilizada por um programa, o que pode evitar problemas de vazamento de memória, resultando no esgotamento da memória livre para alocação.

Python, Ruby, Erlang, Javascript, C#, Java e toda linguagem que roda em cima da JVM como Scala, Clojure, Kotlin, usam GC.

A alocação de memória em Python funciona por contagem de referência, dessa forma, o mecanismo de gerenciamento de memória automático é responsável por alocar memória para seus objetos e desalocá-la quando não há mais referência para esses objetos.

Esse mecanismo de desalocação de memória fica implementado dentro do motor do GC.

Funciona assim, de tempos em tempos o GC do Python percorre a lista de objetos registrados e verifica se existe referência para cada objeto da lista. Se não existir mais referência para eles (ou seja, o número de referências for igual a zero), o Collector desaloca a memória usada por esse objeto.

O mecanismo de contagem de referência funciona mais ou menos assim:

Criamos o objeto Casa() e armazenamos ele dentro da variável var1:
var1 = Casa()
Logo, Casa() tem uma referência na memória chamada var1.Em seguida, criamos a variável var2 e atribuímos à ela var1:
var2 = var1
Desta forma,o objeto Casa() que antes tinha apenas a referência da variável var1, agora tem também a referência da variável var2 para ele.Agora, se criamos o objeto Carro() e atribuímos ele para var1, a referência de var1 não será mais do objeto Casa() e sim do objeto Carro(), e o objeto Casa(), por sua vez, terá apenas a referência de var2.
var1 = Carro()
Supondo que eu faça a atribuição var2 = var1 novamente, agora o objeto Carro() passa a ter duas referências e o objeto Casa() passa a ter 0. É aí que entra o GC.

O GC pode funcionar de forma diferente em cada linguagem. Em geral, o propósito é o mesmo para todas as linguagens que o possuem, mas a execução muda. Em casos que você precisa configurá-lo, é importante manter um equilíbrio entre processamento e uso de memória, não é recomendado forçar a execução do Collector, pois pode gerar um problema maior no seu programa caso a execução seja feita dessa forma.

--

--

No responses yet