O que é coleta de lixo em Java?

O que é coleta de lixo em Java?

Coleta de lixo em Java é um processo pelo qual os programas realizam o gerenciamento de memória automaticamente. O Coletor de Lixo (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 é obtida através do operador new que utiliza alguma memória e a memória permanece alocada até que haja referências para a utilização do objeto.

Quando não há referências a um objeto, presume-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 trata a desalocação automaticamente.

A técnica que faz isso é conhecida como Coleta de lixo. Os programas que não desalocam memória podem eventualmente travar quando não houver mais memória no sistema para alocar. Diz-se que estes programas têm perda de memória.

Coleta de lixo em Java acontece automaticamente durante a vida útil do programa, eliminando a necessidade de desalocar memória e evitando assim 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 em Seção de pilha de memória. Mais sobre isso em um later tutorial.

Exemplo: para aprender o mecanismo de coleta de lixo em Java

Passo 1) Copie o seguintewing código 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();
  }
}

Passo 2) Salve, compile e execute o código. Conforme mostrado no diagrama, dois objetos e duas variáveis ​​de referência são criados.


Mecanismo de coleta de lixo

Passo 3) Remova o comentário da linha # 20,21,22. Salve, compile e execute o código.

Passo 4) Conforme mostrado no diagrama abaixo, duas variáveis ​​de referência apontam para o mesmo objeto.

Mecanismo de coleta de lixo

Passo 5) Remova o comentário das linhas 23 e 24. Compile, salve e execute o código

Passo 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.


Mecanismo de coleta de lixo

Passo 7) Remova o comentário das linhas 25 e 26. Salve, compile e execute o código

Passo 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.

Aprenda coletor de lixo

Como deletar um objeto em Java?

1) Se você deseja tornar seu objeto elegível para coleta de lixo, atribua sua variável de referência como nula.

2) Os tipos primitivos não são objetos. Eles não podem ser atribuídos como nulos.

Como deletar um objeto em Java