Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Dúvida com Referências em Java

Em Java, quando queremos que uma variável seja marcada para remoção pelo GC, basta apontarmos para uma referência nula.

Pessoa p = new Pessoa( );
p.fazAlgo();
p = null; //variavél marcada para coleta

Mas agora vamos supor por exemplo que estamos utilizando algum framework web, e trabalhamos com ajax na view, onde temos um crud que é realizado em uma única tela:

public class MeuController{

private Pessoa p = null;
private List<Pessoa> pessoas;
private PessoaDao dao;//injetado por algum mecanismo

public void iniciarView(){
pessoas = dao.pesquisar();
pessoa = new Pessoa();
}

public void novo(){
if(this.pessoa != null){
this.pessoa = new Pessoa();
}
}

public void salvar(){
dao.insere(this.pessoa);
this.pessoa = new Pessoa();
this.pessoas  =dao.pesquisar();

}

}

O fluxo do programa é o seguinte, após iniciado a view, o usuário clica em novo, preenche os dados e executa a ação de salvar, oque acontece na ação salvar? eu criei um novo objeto pessoa e atribui a variável pessoa, e atribui uma nova coleção para a variável pessoas. O conteúdo antigo dessas variáveis foi marcado para remoção ou eles vão ficar perdidos e vivos na memória para sempre?

2 respostas
solução!

O GC é executado periodicamente e sua tarefa consiste, dando um resumão, em liberar a memória apagando objetos que não são mais referenciados por nenhuma variável. Não é preciso setar null a uma variável para seu objeto antes referenciado tornar-se elegível de ser apagado pelo GC.

Basta não haver nenhuma referência para ele :).

Boa Thiago!