O que é coleta de lixo em Java?
A coleta de lixo em Java é um processo pelo qual os programas executam o gerenciamento de memória automaticamente. O Garbage Collector (GC) encontra os objetos não utilizados e os exclui para recuperar a memória. Em Java, a alocação de memória dinâmica de objetos é feita por meio do novo operador que usa um pouco de memória e a memória permanece alocada até que haja referências para o uso do objeto.
Quando não há referências a um objeto, presume-se que ele não é mais necessário e a memória ocupada pelo objeto pode ser recuperada. Não há necessidade explícita de destruir um objeto, pois o Java trata a desalocação automaticamente.
A técnica que realiza isso é conhecida como Coleta de Lixo . Os programas que não desalocam a memória podem eventualmente travar quando não há mais memória no sistema para alocar. Diz-se que esses programas têm vazamentos de memória.
A coleta de lixo em Java acontece automaticamente durante a vida útil do programa, eliminando a necessidade de desalocar a memória e, assim, evitando vazamentos de memória.
Na linguagem C, é responsabilidade do programador desalocar a memória alocada dinamicamente usando a função free (). É aqui que o gerenciamento de memória Java leva.Nota: Todos os objetos são criados na seção Heap da memória. Mais sobre isso em um tutorial posterior.
Exemplo: para aprender o mecanismo do coletor de lixo em Java
Etapa 1) Copie o código a seguir em um editor.
class Student {int a;int b;public void setData (int c, int d) {a = c;b = d;}public void showData () {System.out.println ("Valor de a =" + a);System.out.println ("Valor de b =" + b);}public static void main (String args []) {Aluno s1 = novo Aluno ();Aluno s2 = novo Aluno ();s1.setData (1,2);s2.setData (3,4);s1.showData ();s2.showData ();// Aluno s3;// s3 = s2;//s3.showData ();// s2 = null;//s3.showData ();// s3 = null;//s3.showData ();}}
Etapa 2) Salvar, compilar e executar o código. Conforme mostrado no diagrama, dois objetos e duas variáveis de referência são criados.
Etapa 3) Descomente a linha # 20,21,22. Salve, compile e execute o código.
Etapa 4) Conforme mostrado no diagrama abaixo, duas variáveis de referência estão apontando para o mesmo objeto.
Etapa 5) Remova o comentário das linhas 23 e 24. Compile, salve e execute o código
Etapa 6) Conforme mostrado no diagrama abaixo, s2 se torna nulo, mas s3 ainda está apontando para o objeto e não é elegível para a coleta de lixo java.
Etapa 7) Remova o comentário das linhas 25 e 26. Salve, compile e execute o código
Etapa 8) Neste ponto, não há referências apontando para o objeto e torna-se elegível para a coleta de lixo. Ele será removido da memória e não há como recuperá-lo.
Como deletar um objeto em Java?
1) Se você deseja tornar seu objeto elegível para a Coleta de Lixo, atribua sua variável de referência como nula.
2) Tipos primitivos não são objetos. Eles não podem ser atribuídos a nulos.