método finilize()

8 respostas
J

Gostaria de saber mais sobre o método finilize().
No DEITEL ele explica que é somente um método de liberação de memória, já no SYBEX ele diz que além disso você desaloca objetos não mais utilizados pra liberar memória, para isso ele adiciona as referências do objeto o NULL. Aí eu fui no Thinking in Java e ele deu umas duzentas definições.

Finalmente vocês usam realmente tanto assim o finilize()? Porque se for só para liberação de memória então é melhoro o do SYBEX.

e aí ?

8 Respostas

cv1

A melhor definicao para o que o metodo finalize faz que eu ja encontrei ate hoje:

finalize() == :evil:

Serio, se vc nao sabe pra que o finalize() serve, nao use, e se vc sabe pra que serve, vc nao vai querer usar nunca :wink:

Mas, se vc esta estudando pra certificacao, ou continua curioso, entao vc pode encontrar boas discussoes sobre ele la na javaranch (http://www.javaranch.com).

Bani

Nunca dependa do finalize, pois você nunca pode ter certeza sobre quando (ou se) ele será chamado.

No meu resumo do livro Effective Java você pode ler mais a respeito, no item 6 (final da página).

J

realmente eu nunca vi muitos códigos com o finilize() (também né ? até parece que já vi muitos códigos :oops:).

Mas eu fiquei em dúvida justamente porque o Thinking in Java fala muito sobre ele e liberação de memória relacionada. Já o SYBEX nem tanto.

No SYBEX o que aparece é somente uma parte em que as referências são setadas para NULL.

Bem… mesmo assim valeu aí pela ajuda Bani e CV :stuck_out_tongue:

caiofilipini

Como o cv e a Bani já escreveram, o nome correto do método é finalize() e não finilize().

G

Poderiam me informar aonde está o indice do ‘resumo do livro’ Effective Java? Gostei daquela explicação “Criando e Destruindo Objetos”

Bani

Não tem índice. Por enquanto só resumi os dois primeiros capítulos.
A medida do possível pretendo resumir um por semana.
Aquele era o primeiro e o segundo está aqui.
Vou ir anunciando quando novos capítulos estiverem disponíveis no meu blog.

Ironlynx

Aliás,muito bom resumo Bani!
Tô sempre no seu site e só agora percebi q vc é usuária do forum…
Continue assim,ótimas matérias!
Parabéns pelo site(blog)!

louds

finalize() serve para desalocar recursos utilizados pelo objeto. Porem só devem ser utilizados quando não existe outra forma de fazê-lo que não seja via uma chamada direta. Normalmente, quase sempre, isso vai involver fazer uma chamada nativa para desalocar recursos externos à JVM.

Isso normalmente é um grande problema para quem vem do C++, onde o destrutor é uma ferramenta de extrema utilidade.

Criado 13 de agosto de 2003
Ultima resposta 14 de ago. de 2003
Respostas 8
Participantes 7