Como anular objetos que nao sao mais necessario

5 respostas
M

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?

5 Respostas

Big_E

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.

Big_E

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?

M

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

WellingtonRamos

Big E:
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.

Não é o caso.
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).

WellingtonRamos
mariazinhahappy:
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

Está estranho esse código... Ao fazer
obj.setB('');
obj = new Object();
O que foi feito na primeira linha (obj.setB('')) pode ter sido perdido e, dependendo da lógica, quebrar teu programa.

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

Criado 11 de março de 2013
Ultima resposta 11 de mar. de 2013
Respostas 5
Participantes 3