O que é a coleta de lixo em Java?
O que é a coleta de lixo em Java?
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 dinâmica de memória de objetos é feita usando o operador new que usa alguma 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, supõe-se que ele não seja 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 lida com a desalocação automaticamente.
A técnica que faz isso é conhecida como Coleta de lixo . Programas que não desalocam memória podem eventualmente travar quando não houver mais memória no sistema para alocar. Dizem 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 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.
Observação:todos os objetos são criados em Heap Seção de 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("Value of a = "+a); System.out.println("Value of b = "+b); } public static void main(String args[]){ Student s1 = new Student(); Student s2 = new Student(); s1.setData(1,2); s2.setData(3,4); s1.showData(); s2.showData(); //Student s3; //s3=s2; //s3.showData(); //s2=null; //s3.showData(); //s3=null; //s3.showData(); } }
Etapa 2) Salve, compile e execute o código. Conforme mostrado no diagrama, dois objetos e duas variáveis de referência são criados.
Etapa 3) Descomente 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) Descomente a linha # 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 coleta de lixo java.
Etapa 7) Descomente a linha # 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 coleta de lixo. Ele será removido da memória e não há como recuperá-lo.
Como excluir um objeto em Java?
1) Se você quiser tornar seu objeto elegível para a Coleta de Lixo, atribua sua variável de referência a null.
2) Tipos primitivos não são objetos. Eles não podem ser atribuídos como nulos.
Java
- Operadores Java
- Interface Java
- Java try-with-resources
- Anotações Java
- Variável estática em Java:o que é bloco e método estático [exemplo]
- Interface vs classe abstrata em Java:qual é a diferença?
- Sobrecarga de construtor em Java:o que é e exemplos de programas
- Java - Framework de coleções
- Java 10 - Coleta de lixo aprimorada
- Java 10 - Alocação de heap