‫Voltaremos e este você.
‫Eu gostaria de falar sobre a catadora de lixo e como ela cuida da memória.
‫Portanto, a coleta de lixo é uma ferramenta que está disponível e em várias linguagens de programação.
‫E em alguns deles, é feito manualmente.
‫Em outros, é feito automaticamente.
‫E a estrutura dot net fornece um gerenciamento automático de memória, o que significa que você não
‫precisa usar o coletor de lixo manualmente como faz em todas as linguagens de programação.
‫Portanto, linguagens de programação como C ou C ++ e outras têm uma coleta de lixo manual que você precisa executar
‫de vez em quando e saber quando precisa executá-la.
‫Então isso é algo que é feito automaticamente.
‫É por isso que a Intershop não é algo assim.
‫Sim, muitas pessoas usam com muita frequência.
‫Assim, quando você tiver programas mais complexos e realmente avançados, começará a usá-los de vez em quando.
‫Mas, realmente, não é algo que você precise usar o tempo todo ou mesmo que precise usar na maioria
‫dos casos.
‫É por isso que não é um tópico importante, por assim dizer.
‫Tudo bem.
‫Então, digamos que temos este objeto chamado Dennis e é do tipo humano.
‫Então, criei uma classe chamada humana, e há várias propriedades diferentes e assim por diante.
‫Então, no final, estou apenas criando um objeto do tipo humano.
‫E isso se chama Dennis.
‫E, ao fazer isso, ao usar essa nova palavra-chave, preciso de memória porque ela cria um objeto em minha memória.
‫Portanto, aloca memória para nós.
‫E a estrutura se encarrega de recuperar a memória para uso no sistema, uma vez que os objetos não estejam mais sendo
‫usados.
‫Portanto, neste caso, estou criando este objeto e, em seguida, posso usá-lo e posso usá-lo novamente e novamente.
‫Mas a certa altura não vou mais usá-lo e talvez esteja até cortando as referências a ele.
‫E então, sim, o coletor de lixo irá limpá-lo porque essa memória agora está bloqueada e o coletor de
‫lixo tem que limpar.
‫Portanto, ele tem que disponibilizar novamente essa memória para outros objetos, por exemplo.
‫Agora, vamos olhar para isso de uma perspectiva visual, portanto, temos este pool de memória do sistema no
‫lado esquerdo e nosso programa no lado direito e o pool de memória do sistema tem um monte de memória.
‫Portanto, podemos usar essa memória para vários programas diferentes.
‫Mas agora temos nosso programa que o executa.
‫Agora, em nosso programa, criamos um objeto.
‫Agora, de repente, precisamos de um pouco de espaço em nossa memória.
‫Tudo bem.
‫Portanto, há uma referência de nosso programa para aquela memória onde nosso objeto está armazenado.
‫Tudo bem.
‫Portanto, há uma referência direta e podemos reutilizá-la e podemos chamá-la de locais diferentes e assim por diante.
‫Tudo bem.
‫E então temos outro e outro.
‫Portanto, temos vários objetos diferentes que criamos e, a cada vez, criaremos o novo objeto.
‫Há uma memória alocada no pool de memória e há uma referência de nosso programa a essa memória.
‫Então, essas referências estão aí.
‫Portanto, há uma referência de nosso programa ao pool de memória.
‫Agora, em um ponto, a referência pode ser excluída.
‫Portanto, podemos excluir a referência definindo uma variável agora ou definindo o objeto como nulo e, em seguida, a
‫referência desapareceu repentinamente.
‫Agora, não há mais referência de nosso programa a este pequeno local de memória aqui.
‫Então, nosso coletor de lixo percebe e diz, OK, não há referência.
‫Portanto, este pequeno pedaço de memória nunca é usado.
‫Então vamos apenas limpar ou vamos ver, eu localizei ou vamos liberar para outro local e é o que
‫acontece então.
‫Portanto, agora vamos dar uma olhada em um exemplo de quando o coletor de lixo entraria em ação, e eu tenho uma função
‫aqui chamada minha função e estou criando um objeto aqui.
‫Novamente, é chamado Dennis.
‫E então Dennis está chamando seus métodos ou nós chamamos seu método, como ensinar.
‫Em seguida, definimos sua idade e chamamos outro método, envelhecer e assim por diante.
‫Mas, em um ponto, esse objeto estúpido na memória não é mais necessário porque a chamada de função
‫acabou.
‫Assim termina a função, o objeto.
‫Dennis sai do escopo e não há mais referências a Dennis porque minha função é uma função e
‫temos esse objeto que está dentro de uma função.
‫Portanto, o escopo dele está dentro da função.
‫Assim, uma vez que a chamada de função termina, não há mais referência direta a ela porque não podemos fazer referência a
‫um objeto que está dentro de uma função de fora desta função.
‫Direito.
‫Portanto, precisaríamos criar campos para isso ou fazer outras abordagens para isso.
‫Mas no final, o coletor de lixo, que está limpando isso então é e realoca essa memória.
‫E a ideia geral aqui é realmente que este é apenas um exemplo simples.
‫Existem muitas outras situações em que o coletor de lixo entraria em ação, mas isso é algo
‫que já usamos.
‫Então, os conceitos que você pode ver aqui, já vimos em outros vídeos ou palestras desse
‫curso.
‫É por isso que escolhi este exemplo.
‫Então, o que você precisa saber sobre a coleta de lixo?
‫Bem, você não precisa chamar o coletor de lixo manualmente, mas pode fazê-lo manualmente.
‫O coletor de lixo requer poder de processamento.
‫Portanto, está em uma linha separada e é muito leve.
‫Mesmo assim, é necessário algum poder de processamento.
‫O objetivo dos coletores de lixo é liberar memória, mas não usar muito poder de processamento.
‫Portanto, ele não precisará de muito poder de processamento em geral, mas não será chamado o tempo todo ou
‫o coletor de lixo não funcionará o tempo todo para liberar memória.
‫Ele só vai funcionar quando for necessário ou quando achar que as coisas necessárias são necessárias.
‫Essa é realmente a parte complicada aqui.
‫A memória não é necessariamente recuperada de imediato.
‫Pode demorar um pouco para o coletor de lixo, mesmo se você ligar manualmente, não precisa
‫correr imediatamente.
‫Portanto, essas são algumas coisas complicadas sobre o coletor de lixo que você pode implementar para finalizar um método
‫para executar o código antes de um objeto ser liberado da memória pelo coletor de lixo.
‫Isso significa que se você decidir executar um código específico pouco antes de um objeto ser limpo, logo antes que o coletor de lixo
‫o faça a limpeza.
‫Assim, uma vez que não há mais referências a ele, por exemplo, você pode usar o método lizer final
‫dentro desta classe para implementar a funcionalidade específica que deseja que eles executem.
‫Talvez você queira limpar as coisas você mesmo antes de o coletor de lixo entrar e
‫limpar seu objeto ou realocar para a memória ou liberar esse objeto da memória.
‫Tudo bem.
‫Quando o coletor de lixo é executado?
‫Bem, quando o sistema tem um pouco de memória física, quando a memória alocada excede o limite
‫predefinido, quando os coletores de lixo coletam ou o método de coleta é chamado, mesmo que seja um método super
‫complicado.
‫Então, isso é algo que é.
‫Sim, muito específico.
‫Muito especial.
‫Se você quiser saber mais sobre isso, consulte a documentação do coletor de lixo.
‫Mas o método de coleta nem sempre é chamado imediatamente e não limpa tudo diretamente.
‫É mais como se você estivesse dando uma sugestão para a ferramenta.
‫Então você está dizendo, OK, coletor de lixo.
‫Eu pessoalmente acho que seria um bom ponto ou um bom local para coletar o lixo, mas em alguns casos pode
‫não aceitar ou pode apenas fazer isso mais tarde ou algo assim.
‫Talvez ele apenas tenha feito a coleta de lixo e decida que não é necessário ou algo assim.
‫Portanto, é muito complicado.
‫Se quiser saber mais sobre o assunto, verifique a documentação.
‫Mas acho que este é um bom ponto de partida para entender o que o coletor de lixo faz.
‫E como eu disse, na maioria dos casos, você não vai precisar porque hoje em dia temos muita memória e se você não
‫tem grandes vazamentos de memória em seus programas, você nunca deve ter esses problemas.