El propósito de este método se explica en la documentación de la API de la siguiente manera:
se invoca si y cuando la máquina virtual Java ha determinado que ya no hay ningún medio por el cual se pueda acceder a este objeto por ningún hilo que aún no haya muerto, excepto como resultado de una acción tomada por la finalización de algún otro objeto o clase que está lista para ser finalizada ...
El propósito habitual de finalize
... es realizar acciones de limpieza antes de que el objeto se descarte irrevocablemente . Por ejemplo, el método de finalización para un objeto que representa una conexión de entrada / salida podría realizar transacciones de E / S explícitas para romper la conexión antes de que el objeto se descarte permanentemente ...
Si también está interesado en las razones por las cuales los diseñadores de idiomas han elegido que "el objeto se descarta irrevocablemente" ( basura recolectada ) de la manera que está más allá del control del programador de aplicaciones ("nunca debemos confiar"), esto se ha explicado en una respuesta a pregunta :
recolección automática de basura ... elimina clases enteras de errores de programación que perjudican a los programadores C y C ++. Puede desarrollar código Java con la confianza de que el sistema encontrará muchos errores rápidamente y que los principales problemas no permanecerán inactivos hasta que se haya enviado su código de producción.
La cita anterior, a su vez, se tomó de la documentación oficial sobre los objetivos de diseño de Java , es decir, se puede considerar una referencia autorizada que explica por qué los diseñadores de lenguaje Java decidieron de esta manera.
Para una discusión más detallada y agnóstica del lenguaje de esta preferencia, consulte la sección 9.6 de OOSC Gestión automática de memoria (en realidad, no solo vale la pena leer esta sección, sino todo el capítulo 9 si está interesado en cosas como esa). Esta sección se abre con una declaración inequívoca:
Un buen entorno OO debería ofrecer un mecanismo automático de administración de memoria que detecte y recupere objetos inalcanzables, permitiendo a los desarrolladores de aplicaciones concentrarse en su trabajo: el desarrollo de aplicaciones.
La discusión anterior debería ser suficiente para mostrar cuán importante es tener una instalación de este tipo disponible. En palabras de Michael Schweitzer y Lambert Strether:
Un programa orientado a objetos sin administración automática de memoria es más o menos lo mismo que una olla a presión sin una válvula de seguridad: ¡tarde o temprano la cosa seguramente explotará!