Fala, meus consagrados! Beleza?
O Garbage collection (coleta de lixo) é o processo em que o JRE exclui objetos quando aquele determina que estes não estão mais sendo usados. Não é necessário a destruição explícita dos objetos criados.
Um objeto elegível para coleta de lixo é um objeto que não possui mais referências, ou seja, todas as referências a um objeto devem ser descartadas antes que o objeto seja elegível para coleta de lixo
Referências mantidas em uma variável são normalmente descartadas quando:
- A variável sai do escopo em que ela se encontra; ou
- Um valor null é atribuído explicitamente à variável-objeto.
Figura 1: Tipos de garbage collection.
Há os seguintes tipos de garbage collection:
- Minor Garbage Collection:
- Coleta de Lixo Menor;
- É quando os objetos são coletados ao garbage collection da Young Generation;
- Enquanto está sendo executada, todas as threads da aplicação são paralisadas;
- Major Garbage Collection:
- Coleta de Lixo Maior;
- É quando os objetos são lixo coletado da Old Generation; e
- Full Garbage Collection:
- Coleta de Lixo Completa;
- É quando os objetos são lixo coletado da Permanent Generation.
O Garbage Collector é um programa que está dentro do JRE. Não é controlado pelo programador: a JVM decide quando executá-lo.
O garbage collector:
- Libera periodicamente a memória usada por objetos que não são mais referenciados; e
- Faz o seu trabalho automaticamente quando determina que é a hora certa;
- Não há um momento pré-determinado.
Há dois métodos na linguagem Java que são relacionados com o Gabarge Collection:
- Método finalize() da classe Object;
- protected void finalize();
- Pertence à classe Object (classe que é a base de cada hierarquia de classes em um projeto Java);
- É chamado pelo Garbage Collector para um objeto quando o processo Garbage Collection determina que não há mais referências para esse objeto;
- Método gc() da classe System;
- public static void gc();
- Pertence à classe System;
- Força chamar o Garbage Collector;
- Chamar esse método sugere que a JVM envie esforços para a reciclagem de objetos não utilizados, a fim de tornar a memória que eles atualmente ocupam disponível para reutilização rápida
- Nada garante que ele realmente vá coletar lixo naquele momento, mesmo tentando “forçar” a coleta de lixo.
Há a possibilidade do programador chamar o gabarge collector, mas mesmo assim, não há garantia de que este irá realmente ser executado no momento que é chamado.
Vamos entender como um objeto é elegível para ser coletado. Vejam o primeiro trecho de código em Java:
1. Classe a;
2. Classe b;
3. Classe c;
4. a = new Classe(“A”);
5. b = a;
6. c = new Classe(“C”);
No trecho acima, temos três variáveis-objeto (a, b e c) do tipo da Classe. Essas variáveis-objeto ficam na Stack Memory.
Na linha 4, a primeira variável-objeto a recebe a referência do objeto recém-criado a partir do operador new seguido do construtor da classe passando o parâmetro “A”.
Esse novo objeto fica na Young Generation lá há Heap Space.
Na linha 5, a variável-objeto b vai apontar para o mesmo objeto que a variável-objeto a está apontando. Então o objeto possui duas referências.
Na linha 6, a variável-objeto c possui seu próprio objeto, também recém-criado a partir do operador new seguido do construtor da classe passando o parâmetro “C”. Esse objeto, também na na Young Generation lá há Heap Space, tem apenas uma referência.
Figura 2: Variáveis-objeto referenciando objetos.
Vamos para o segundo trecho de código em Java que complementa o primeiro:
1. b = null;
2. c = new Classe(“D”);
Na linha 1 do segundo trecho, a variável-objeto b, deixa de apontar para o objeto “A”, mas a variável-objeto a ainda aponta para esse objeto.
Na linha 2, a variável-objeto c deixou de apontar o objeto “C” e agora aponta para um objeto recém-criado a partir do operador new seguido do construtor da classe passando o parâmetro “D”, ou seja, o objeto “C” fica órfão de referência e solto na Young Generation lá há Heap Space.
Com isso, o objeto “C”, sem referência, vira elegível para ser coletado.
Figura 3: Variáveis-objeto referenciando objetos.
Espero que tenham gostado!
Forte abraço e até a próxima jornada!
_________________________
Professor Rogerão Araújo
Quer ficar por dentro dos concursos públicos abertos e previstos pelo Brasil?
clique nos links abaixo:
Receba gratuitamente no seu celular as principais notícias do mundo dos concursos!
clique no link abaixo e inscreva-se gratuitamente:
Participe da conversa