Eu tenho lido muitas das perguntas novatas sobre Java finalize()
e acho meio desconcertante que ninguém tenha deixado claro que finalize () é uma maneira não confiável de limpar recursos. Vi alguém comentar que eles o usam para limpar o Connections, o que é realmente assustador, pois a única maneira de chegar perto da garantia de que o Connection está fechado é implementar finalmente o try (catch).
Eu não tinha formação em CS, mas tenho programado profissionalmente em Java há quase uma década e nunca vi ninguém implementando finalize()
em um sistema de produção. Isso ainda não significa que ele não tem seus usos ou que as pessoas com quem trabalhei estão fazendo certo.
Portanto, minha pergunta é: quais casos de uso existem para implementar finalize()
que não podem ser tratados de maneira mais confiável por meio de outro processo ou sintaxe no idioma?
Forneça cenários específicos ou sua experiência, simplesmente repetir um livro de texto Java ou finalizar o uso pretendido não é suficiente, pois não é o objetivo desta pergunta.
finalize()
. No entanto, o código da biblioteca da plataforma , como SocketInputStream
, que gerencia recursos nativos em nome do responsável pela chamada, tenta minimizar o risco de vazamentos de recursos (ou usa mecanismos equivalentes, como os PhantomReference
que foram adicionados posteriormente). Portanto, o ecossistema precisa deles , mesmo que 99,9999% dos desenvolvedores nunca escrevam um.