Garbage Collector?
- Gerson Reis
- 5 de jul. de 2020
- 4 min de leitura
Atualizado: 15 de jul. de 2020

Neste artigo vou considerar que você já tenha uma base do que é uma stack e uma heap, também uma noção do que é o CLR (Common Language Runtime), sendo assim a estrela da vez é o Garbage Collector.
Caso não tenha nenhuma noção desses itens, sugiro uma googlada rapidinha só pra ter uma base, pois vai valer o esforço.
Garbage collector é um processo acionado pelo CLR que facilita e muito a vida do desenvolvedor C#, entender o que ele é e como funciona é essencial para escrever um software de qualidade.
Muitos desenvolvedores ignoram o seu comportamento, outros nem imaginam que ele existe, mas acredite entender como o garbage collector funciona pode mudar a forma que você irá encarar seus desafios de performance e aqueles bugs que não fazem sentido.
Não é incomum que muitos desenvolvedores não entendem o que é, pois com o excesso de informações desorganizadas chegando diante do nosso monitor, nos empolgamos e esquecemos da base da tecnologia que trabalhamos, é mais fácil achar desenvolvedores C# falando de microsserviços, noSql, cloud e muitas outras coisas e os mesmos não lhe responderem uma simples pergunta: Como funciona o GC? (já fui por muito tempo um desses).
Muitas vezes buscamos tecnologias para nos gerar performance e esquecemos que um sistema bem escrito utilizando apenas o que já temos, pode muito bem resolver o problema.
Gerenciar a memória, ou ao menos se preocupar com ela pode lhe trazer muitos benefícios.
Vamos lá…
Resumidamente, o que é o Garbage Collector?
Nada mais que um processo utilizado para gerir a memória que seu aplicativo consome. O objetivo dele é claro, liberar espaços inutilizados, assim evitando vazamento de memória fazendo com que “sempre” tenha espaço livre para novos objetos.
Vazamento de memória:
“Em ciência da computação vazamento de memória ou memory leak é um fenômeno que ocorre quando um programa de computador gerencia incorretamente alocações de memória de maneira que certa memória não é liberada quando não é mais necessária.”
Toda as linguagens tem isso?
Não, mas a que se relaciona este post sim, considerando a existência de C++ e muitas outras no mercado, talvez você não saiba uma grande diferença entre ela e o C#:É que a linguagem C++ é uma tecnologia onde o desenvolvedor deve sempre lembrar de liberar o espaço que acabou de utilizar, ou ao menos deveria fazer isto, este é um dos fatores onde ela se torna muito mais trabalhosa no dia a dia, não sendo viável para muitas situações, porém ela tem seu benefício no controle total sobre a situação, o fato de deixar tudo no comando do desenvolvedor lhe dá muito mais liberdade para resolver as situações das formas mais variadas, porém abre espaço para mais falhas.
Mas voltando ao assunto, como funciona o Garbage Collector?
Para entender como o GC funciona, devemos entender primeiro como as coisas chegam na memória.
Nosso sistema quando inicializado, entra em ação o CLR que logo reserva um espaço na memória para gerenciar o comportamento da nossa aplicação.
Quando inicializamos um novo objeto, o CLR aloca um espaço na Heap para este novo integrante e faz uma referência na stack. Porém a memória que temos não é infinita, logo ao decorrer da solução tendemos a precisar liberar mais espaço pois vamos ter novos objetos, para isso necessitamos que alguns mais antigos saiam para outros entrarem.
Este é o momento que o GC entra em ação, ele por si só saberá o melhor momento de agir e liberar os slots necessários dentro da Heap para os novos integrantes.
Mas o que é feito para liberar espaço?
A missão dele é identificar objetos que não tenham mais referências no aplicativo em execução e elegê-los a um processo de eliminação. Um objeto deixa de ter referência ao decorrer do sistema, conforme vamos seguindo com o fluxo de nossos algoritmos vamos deixando de utilizar objetos que criamos no passado e logo começamos a utilizar outros.
Como ele identifica os objetos sem referência? Ele percorre pela memória em busca verificar objetos que não tem referência na Stack, sendo assim ele considera que este objeto não tem mais utilidade.
Exemplo de uma perda de referência pode ser quando: Você definiu novos objetos dentro de um método para alguma lógica e esses mesmos não são o retorno, ou seja, apenas foram usado ali para algum processo, ao sair deste método todos os objetos que ali dentro estão, automaticamente estão sujeitos a serem mapeados para o GC.
Um objeto considera-se referenciado também se ele tiver em uma ligação com algum objeto que tenha referência na Stack.
E como é decidido o momento da ação? Para o momento da ação, procurei buscar o material direto no site da microsoft, pois o foco era simples e rapido, apenas mostrar a base. Então segue uma referencia:
“Garbage collection occurs when one of the following conditions is true:
The system has low physical memory. This is detected by either the low memory notification from the OS or low memory as indicated by the host.
The memory that’s used by allocated objects on the managed heap surpasses an acceptable threshold. This threshold is continuously adjusted as the process runs.
The GC.Collect method is called. In almost all cases, you don’t have to call this method, because the garbage collector runs continuously. This method is primarily used for unique situations and testing.” Microsoft
O intuito deste material é despertar em você a vontade de saber um pouco mais sobre o GC, e te incentivar a buscar mais conteúdo sobre o mesmo, pois ainda tem muita coisa que você pode descobrir sobre ele, a abordagem ficou superficial, pois acredito que agora sabendo a importância dele e sabendo a base de como funciona, tudo fica mais fácil para seguir com seus estudos.
Em breve falaremos mais sobre…
Vale lembrar que não escrevo este artigo me denominando super entendedor do assunto, mas sim como um mero desenvolvedor que tenta tirar o melhor da tecnologia que trabalha dentro e do conhecimento que vai adquirindo dia após dia.
Comments