Destruindo objetos

Como posso destruir um objeto explicitamente?

Não pode. Apenas retire as referências a ele, e aguarde o GC.

Mas… precisa mesmo disso?

Cara em JAVA o comportamento de destruir objetos é uma tarefa automática feita pelo garbage collector quando ele precisa de memória.
Ele pega todos os objetos que não estão sendo mais referenciados e destroi.
Vc pode por exemplo tirar todas as referências de um objeto e chamar System.gc. Mas não é garantido que o objeto vai ser realmente destruido nesse momento.

Espero ter ajudado.

Bom… Estou implementando manualmente uma lista. Algo do gênero:

class elemento
{
   public String nome;
   public int codigo;
}


class no
{
   public elemento dados;
   public no prox;
}

A questão é: se eu pegar o primeiro elemento da lista e fizer prox igual a null, todos os próximos elementos vão ser destruidos ou tenho que ir ao penúltimo elemento e apagar a referência para o último e vir voltando até o primeiro?

Obrigado!

Cara num sei pra que tu quer isso, mas aqui num é C tu não precisa se preocupar muito com o gerenciamento de memória.

Se a unica referência ( apontador ) para o segundo elemento de uma lista for o primeiro. Ai sim é so pegar o primeiro e setar prox para null. Que algum dia o coletor de lixo irá destruir esse objeto da memória.

É isso mesmo, algum dia. Vc não tem como monitorar quando esse objeto vai ser destruido, como se faz em C.

A principio vc pode achar isso ruim, mas na verdade é muito bom. Que livra o programador de ficar controlando a memória. Livra também daqueles malditos erros de ponteiros. rsrsrs

Espero ter ajudado, num esquece de avaliar a resposta.

Flw

Estou criando manualmente por uma questão de estudo e também porque me sinto mais seguro mexendo pessoalmente com a memória. Coisas de programador de C.

Mas você não respondeu completamente a minha pergunta: e se houverem mais de 2 elementos? devo ir até o final e ir voltando ou basta tirar a referência do segundo?

Olha só

Eu tenho uma propriedade ( variavel de instancia ) que referencia um objeto que é sua lista.

–> |-| --> |-| --> |-|

Vamos supor que # seja minha var que aponta para a lista
se eu fizer

= null

Minha lista formará uma ilha de objetos sem referencia e provavelmente algum dia será excluida pelo coletor.

se eu fizer

–> |-| = null

Um dia os outros dois objetos serão excluidos
MAs isso é abstrato para o programador.

Respondeu?

sim!

Vc pode pedir pro GarbageCollector tirar da memoria pra vc, mas nem sempre ele executaqdo vc pede… dá uma sapeada sobre GC :wink:

[quote=pdform]Bom… Estou implementando manualmente uma lista. Algo do gênero:

class elemento
{
   public String nome;
   public int codigo;
}


class no
{
   public elemento dados;
   public no prox;
}

A questão é: se eu pegar o primeiro elemento da lista e fizer prox igual a null, todos os próximos elementos vão ser destruidos ou tenho que ir ao penúltimo elemento e apagar a referência para o último e vir voltando até o primeiro?[/quote]

Sim, todo os elementos serao “destruidos”. Entre aspas porque na verdade eles nao serao destruidos - estarao apenas inacessiveis. Posteriormente o GC vai passar, verificar que estao inacessiveis e entao desalocara essas areas na memoria. Claro, isso se o “prox” for a unica referencia para o elemento. O GC nao vai desalocar objetos que ainda estao sendo referenciados.

Fica bem mais simples essa implementacao de lista encadeada usando Java do que C. :smiley:

Marcio Kuchma