He estado leyendo muchas de las preguntas de Java para novatos finalize()
y me parece desconcertante que nadie haya dejado en claro que finalize () es una forma poco confiable de limpiar recursos. Vi a alguien comentar que lo usan para limpiar Connections, lo cual es realmente aterrador ya que la única forma de acercarse a una garantía de que una Conexión está cerrada es implementar try (catch) finalmente.
No fui educado en CS, pero he estado programando en Java profesionalmente durante casi una década y nunca he visto a nadie implementarlo finalize()
en un sistema de producción. Esto todavía no significa que no tiene sus usos, o que las personas con las que he trabajado lo han estado haciendo bien.
Entonces, mi pregunta es, ¿qué casos de uso hay para implementar finalize()
que no puedan manejarse de manera más confiable a través de otro proceso o sintaxis dentro del lenguaje?
Proporcione escenarios específicos o su experiencia, simplemente repitiendo un libro de texto Java o finalizando el uso previsto no es suficiente, ya que no es la intención de esta pregunta.
finalize()
. Sin embargo, el código de la biblioteca de la plataforma , como SocketInputStream
, que gestiona los recursos nativos en nombre de la persona que llama, lo hace para tratar de minimizar el riesgo de pérdidas de recursos (o utiliza mecanismos equivalentes, como los PhantomReference
que se agregaron más adelante). Por lo tanto, el ecosistema los necesita , aunque el 99.9999% de los desarrolladores nunca escribirán uno.