J'ai lu beaucoup de questions sur les recrues Java finalize()
et je trouve déconcertant que personne n'ait vraiment expliqué clairement que finalize () est un moyen peu fiable de nettoyer les ressources. J'ai vu quelqu'un commenter qu'il l'utilisait pour nettoyer les connexions, ce qui est vraiment effrayant car la seule façon de se rapprocher le plus d'une garantie de fermeture d'une connexion est d'implémenter finalement try (catch).
Je n'étais pas scolarisé en CS, mais je programme en Java professionnellement depuis près d'une décennie maintenant et je n'ai jamais vu personne implémenter finalize()
dans un système de production. Cela ne signifie toujours pas qu'il n'a pas ses utilisations ou que les gens avec qui j'ai travaillé l'ont bien fait.
Donc ma question est, quels sont les cas d'utilisation pour l'implémentation finalize()
qui ne peuvent pas être traités de manière plus fiable via un autre processus ou syntaxe dans le langage?
Veuillez fournir des scénarios spécifiques ou votre expérience, simplement répéter un manuel Java ou finaliser l'utilisation prévue n'est pas suffisant, comme ce n'est pas le but de cette question.
finalize()
. Cependant, le code de bibliothèque de plate - forme , tel que SocketInputStream
, qui gère les ressources natives au nom de l'appelant, le fait pour essayer de minimiser le risque de fuites de ressources (ou utilise des mécanismes équivalents, tels que PhantomReference
, qui ont été ajoutés plus tard.) Donc, l'écosystème en a besoin , même si 99,9999% des développeurs n'en écriront jamais.