Si la excepción se plantea en una declaración try-catch y está correctamente capturada, entonces sí, "el GC procederá más adelante", como lo hace en los programas normales.
Pero si la excepción lanzada no se maneja entonces, de acuerdo con el JSL,
Si una excepción no capturada se lanza durante la finalización, la excepción es ignorado y la finalización de ese objeto termina.
Por lo tanto, en este caso el "GC detendrá el proceso para ese objeto" y en cuyo caso puede ser que algunos de sus recursos no se hayan liberado correctamente.
Por cierto, el finalizador tiene 2 inconvenientes:
No se puede estar seguro de que el método de finalización será nunca ser ejecutado (de this blog)
Por qué hacer lo anterior, si el el recolector de basura siempre llamará a finalizar antes de liberar la memoria asociada con un objeto? La razón es porque el recolector de basura no siempre tiene la oportunidad de limpiar los objetos antes de que termine la JVM.
objetos de fuerza
finalizadores para ser promovidos al espacio de edad (que lleva más tiempo en cobrar), y posponer la GC hasta que se ejecute el finalizador, añadiendo más sobrecarga a la algotithm GC. (cf Java performance Tuning 2nd, Edition, de Jack Shirazi).
¿Por qué está escribiendo los métodos 'finalize()' en su código Java? Es una mala práctica en la mayoría de los casos. –
No, no he escrito dicho método, solo para mi conocimiento – Kumar