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?