Cuando un objeto ya no está en uso por el programa es eliminado de memoria por el garbage collector. Si bien, antes de ser eliminado de la memoria, el garbage collector finaliza el objeto Java. Es decir, ejecuta el método finalize().
Y es que el método finalize() nos permite ejecutar las acciones pertinentes sobre el objeto antes de que sea totalmente eliminado. Por ejemplo, podemos pensar en casos como gestión de ficheros o bases de datos, en los cuales podremos cerrar las conexiones sobre dichos recursos.
La definición del método finalize() tiene la siguiente estructura:
protected void finalize() throws Throwable{
System.out.println("Finalizando el Objeto");
super.finalize();
}
Al incluir el método finalize() sobre un objeto estaremos reescribiendo el método finalize() por defecto que viene en la clase Object. Mediante la sentencia super.finalize() estamos ejecutando el método finalize() de las clases padre.
Aunque los métodos finalize() se ejecutarán cuando pase el garbage collector, existe la posibilidad de sugerir a la máquina virtual java (jvm) que se ejecute el finalize de los métodos. Esto lo conseguiremos ejecutando el método runFinalization() de la clase System.
El método System.runFinalization() solo es una sugerencia. No implica una ejecución directa de los métodos finalize().
El código de ejecución del System.runFinalization() sería el siguiente:
public static void main(String[] args) {
FinalizarUnObjeto fuo = new FinalizarUnObjeto();
System.out.println(fuo.toString());
fuo = null;
System.runFinalization();
}