Un metodo finalize()
è un metodo come un altro. Fa tutto ciò che programmerai per fare. La particolarità di solo è che può essere chiamata in modo imprevedibile dalla JVM prima che un oggetto venga sottoposto a garbage collection. Se lo chiami manualmente, fa la stessa cosa che farebbe durante una chiamata innescata da GC.
Tuttavia, con tutti i moderni garbage collector, in pratica non è possibile fare affidamento su un oggetto che viene raccolto in un determinato momento o in realtà. Pertanto non è possibile utilizzare finalize()
per garantire che venga eseguita un'azione, che limita strongmente l'utilità. (L'unica cosa che fa bene è il debug quando gli oggetti vengono raccolti, e la JVM ha opzioni migliori per questo.) Ecco perché il consiglio generale è "Ignora solo finalize()
".