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