Destructores¶
En C++ los objetos se crean con new y para eliminarlos de la memoria se emplea la instrucción delete
. Es decir, es responsabilidad del programador eliminar la memoria que ocupaban los objetos que se van a dejar de usar. La instrucción delete
de C++ llama al destructor de la clase, que es una función que se encarga de eliminar adecuadamente el objeto.
La sorpresa de los programadores de C++ que empiezan a trabajar en Java es que no hay instrucción delete
en Java. La duda está entonces en determinar cuándo se libera la memoria que ocupa un objeto.
En Java hay un recolector de basura (garbage collector
) que se encarga de gestionar los objetos que se dejan de usar y de eliminarlos de memoria. Por lo general este proceso de recolección de basura trabaja cuando detecta que un objeto hace demasiado tiempo que no se utiliza en un programa. Se trata de una destrucción por defecto.
Se puede forzar la eliminación de un objeto asignándole el valor null
, pero eso no equivale al delete
de C++ que eliminaba el objeto a la vez que liberaba la memoria. Con null
la memoria no queda libre inmediatamente, sino que pasa un cierto tiempo impredecible hasta su vaciado.
Finalizadores¶
finalize()
es equivalente a los destructores en C++. Es un método que es llamado antes de eliminar definitivamente el objeto para hacer limpieza final.
Este método de finalización puede generar problemas de rendimiento y no garantizan que su ejecución se produzca de forma inmediata. Su uso está totalmente desaconsejado (la versión 9 del JDK ha marcado el método finalize()
como Deprecated
1).
-
La directiva
deprecated
permite indicar que una función, tipo o cualquier otro identificador puede que deje de admitirse en una versión futura o que no se deba seguir utilizando. ↩