Estados de Objetos

4 respostas
mirrah

Bom gente, no meio do desenvolvimento de um projeto, me surgiu uma dúvida. Como é que eu sei que um determinado objeto é realmente o que eu quero, e como eu faço para destruir o objeto na unha em vez de o garbage colector fazer isso para mim?(Isso é possível?) E como é a gerencia de objetos do tomcat, ele tem isso?

Obrigado a todos :slight_smile:

4 Respostas

henriqueluz
  1. Pra saber sobre o objeto use o operador “instanceof”
  2. Por que você quer destruir um objeto ao inves de deixar o gc fazer esta tarefa?
MarcioCasteloBranco

Outro ponto importante a respeito do garbage collector é que, como ele é controlado pela JVM, não é possível forçar a sua execução via programação. O máximo que pode ser feito é a chamada do método System.gc() (ou Runtime.getRuntime().gc()). Este método notifica a JVM que a aplicação gostaria que o garbage collector fosse executado, mas não garante que ele realmente será executado no momento desejado.

O método finalize
A classe Object do Java possui um método chamado finalize(), que pode ser sobrescrito pelas classes que herdam de Object (isto é, qualquer classe). Quando o garbage collector decide que determinado objeto será destruído por não ser mais referenciado, ele chama o método finalize() no objeto logo antes de destruí-lo.

Apesar do método finalize() ser uma chance que o programador tem para liberar recursos associados ao objeto no momento em que ele será destruído, sobrescrever o finalize() não é recomendado em nenhuma situação. O motivo é simples: como não existe garantia que o objeto será destruído, também não existe garantia que o finalize() será executado. A própria Sun não recomenda sobrescrever o método finalize(). A liberação de recursos pode ser feita de outras formas, como utilização de blocos try/catch/finally e/ou criação de métodos específicos para este fim (método close(), por exemplo).

Para mais informações sobre este tópico, consulte:
http://java.sun.com/developer/TechTips/2000/tt0124.html.

leonardobhbr

Apenas seta null para seus objetos quando não sera mais utilizado, apenas para vm quando achar necessário limpar a referência da memória.

Sobre destruir um objeto na unha isso é muito utilizado em linguagens que não são interpretada como Delphi e C.

Como java roda em cima de uma maquina virtual ela faz essa parte pra voce

discorpio

Boa noite a todos.

Concordo com os amigos MarcioCasteloBranco e Leonardobhbr.

A melhor maneira de voce eliminar um objeto da memória é atribuir “null” a sua instância e deixar que Gabage Collector faça o resto, afinal, o GC foi criado exatamente para isto, para que não precisassemos ficar se importando quais os objetos deveriamos eliminar.

Outros conceitos sobre instâncias de objetos, e que muita gente pensa que o objeto em si é armazenado nela, quando na verdade o que é armazenado na instância é o endereço de memória onde o objeto foi alocado, funcionando como uma espécie de ponteiro. Na linguagem Object Pascal do Delphi tinhamos além de atribuir o valor “nil” (isto mesmo, é nil e não null), tinhamos também que destruir o objeto com o método Destroy ou free, e e corriamos o risco de destruir o objeto sem limpar a instância, ou vice versa e muita das vezes isto era um transtorno.

Garbage Collector veio justamente para resolver isto, limpando da memória todos os objetos cujas as intâncias são nulas.

Dê uma olhada neste post abaixo:

http://www.guj.com.br/articles/28;


Criado 14 de julho de 2011
Ultima resposta 14 de jul. de 2011
Respostas 4
Participantes 5