tipo peguei o objeto dentro de um for e adicionei em uma lista depois adicionar, nao vou ser mais util esse objeto como que entao pego e limpo ele da memoria tipo anular ele, sabe?
Como anular objetos que nao sao mais necessario
5 Respostas
Em Java existe um recurso, nativo da JVM, chamado Garbage Collector, ele se encarrega automaticamente disso pra você, apesar de não se saber ao certo quando o algorítimo é executado.
No seu caso, se criou o objeto no escopo do laço FOR, ao final da execução ele já será tachado como obsoleto e ficará disponível para o Garbage Collector recolhê-lo.
Estude sobre ele, vai esclarecer melhor sua dúvida.
Apenas complementando…caso queira forçar o objeto a ser recolhido pelo GC, atribua null a sua referência.
Tipo:
Integer numero = new Integer(1);
public void calcula() {
System.out.print(numero + 1);
numero = null; // Dessa forma o endereço de memória que aloca o objeto "new Integer(1)" passa a não ter mais uma referência a ele e será liberado assim que o GC passar.
}
Etendeu?
no meu caso eu estou fazendo assim
for (;;) {
// logica de negocio
obj.setB('');
obj = new Object();
lista.add(obj);
}
tenho medo de enxer muito a memoria por isso queria ir limpando toda vez que adicionar
Em Java existe um recurso, nativo da JVM, chamado Garbage Collector, ele se encarrega automaticamente disso pra você, apesar de não se saber ao certo quando o algorítimo é executado.Não é o caso.
No seu caso, se criou o objeto no escopo do laço FOR, ao final da execução ele já será tachado como obsoleto e ficará disponível para o Garbage Collector recolhê-lo.Estude sobre ele, vai esclarecer melhor sua dúvida.
Pelo que entendi ela fez:
List<Object> listaGenerica = new ArrayList<Object>();
for(int i = 0; i < 10; ++i) {
Object object = new Object();
listaGenerica.add(object);
}
Neste caso, mesmo object sendo criado dentro do for, ele foi fornecido a um objeto fora do for (ou seja, um escopo mais amplo) logo ele não será coletado.
Entretanto, aqui, Object object representa apenas uma referência ao objeto criado em memória.
Daí pergunta-se, quando será coletado então? Quando não houver mais nada referenciando o objeto. Neste caso, ocorrerá apenas quando o objeto for removido da lista (ou com remove ou com clear). Caso contrário, ele permanecerá em memória por todo o tempo de vida da lista (as vezes é necessário fazer lista = null após o clear para "acelerar" a coleta).
no meu caso eu estou fazendo assimEstá estranho esse código... Ao fazerfor (;;) { // logica de negocio obj.setB(''); obj = new Object(); lista.add(obj); }tenho medo de enxer muito a memoria por isso queria ir limpando toda vez que adicionar
obj.setB('');
obj = new Object();
Pode ser que exista um erro maior aqui...
Se o obj = new Object() foi feito com a intenção de apagar o objeto anterior, seria melhor fazer obj = null (mas aí, não haveria motivos para adicionar À lista).