Conceito de Garbage Collector (GC) explicado para uma criança!
Eu tive recentemente o desafio de explicar conceitos difíceis de programação para meu irmão de 13 anos. O maneiro que isso virou uma rotina, tentar explicar coisas complicadas para uma criança. Quem sabe eu esteja plantando uma sementinha para um futuro cientista da computação?
Bom, eu sou o Pedro! Mas, podem me chamar de PHP haha! Hoje quero compartilhar com vocês o roteiro que eu preparei para o meu próximo papo com meu irmão.
Eu gosto de trazer analogias para algo mais simples que fez em algum momento parte do dia a dia dele, então dessa vez eu fiz uma analogia de uma "caixa de brinquedos". Sim! Isso é extremamente importante para eu construir interesse no assunto e aos poucos iniciar nossa conversa sem intimidar ele.
Ele tem uma caixa de brinquedos, alguns brinquedos que já não brinca mais, porém, estão lá na caixa ocupando espaço que poderiam ser de novos brinquedos. Sempre quando ele joga todos os brinquedos no chão para brincar (Sim! Ele fazia muito isso haha), inclusive, esses brinquedos que ele não brinca mais, acabavam voltando para a caixa e continuavam ocupando espaço.
Logo, quando ele terminava de brincar com seus brinquedos, mesmo não brincando mais com alguns, ele os coloca de volta na caixa, certo?
Agora, combinei com ele uma regrinha nova e que para ele ganhar novos brinquedos será necessário agora liberar espaços nessa caixa dele. Assim, livrando-se de brinquedos que não são usados por um bom tempo, ganhando, portanto, um espaço novo nessa caixa. (essa caixa tinha um tamanho limitado).
Essa regrinha a mais que acabei de combinar com ele é basicamente o que o Garbage Collector faz! Muito maneiro, né? Ele acabou de aprender Garbage Collector de forma bem simples.
Vamos fechar com chave de ouro?
Um programa no computador usa a memória para guardar informações temporárias, como números e palavras, certo?. Às vezes, cria novos objetos, como listas ou jogadores de um jogo, certo? Quando esses objetos não são mais necessários, o Garbage Collector atua como ele atuou com seus brinquedos, o GC vai verificar a memória e remover os dados que não são mais usados, liberando espaço para novos dados.
Sensacional, né?
Essa conceito de "coleta de lixo" encontra-se presente em várias linguagens de programação! Inclusive, até o Javascript em seu runtime NodeJs e em navegadores possuí implementações de GC que monitoram a alocação de memória e removem objetos não utilizados de forma automática. Garbage Collector (GC) não está presente só no Javinha, também está espalhado por aí na computação haha! O GC do C# é parte do Common Language Runtime (CLR) e funciona de maneira semelhante ao GC do Java. Até o Python também possui um coletor de lixo embutido que gerencia automaticamente a alocação e liberação de memória. Cada linguagem, claro, com sua especificidades... Mas, não deixa de ser maneiro, né?
Então é isso! Um forte abraço! Talvez isso vire um assunto mais frequente em meu perfil... Tentar explicar de forma simples nosso mundo! Valeu para quem ler até aqui!