Destructor en Java

Hiten Kanwar 12 octubre 2023
Destructor en Java

El destructor es lo opuesto a un constructor. Por un lado, cuando se usa un constructor para inicializar un objeto, se usa un destructor para destruir (eliminar) un objeto que libera el recurso ocupado por el objeto.

Este tutorial discutirá los destructores en Java, su funcionamiento y sus métodos.

Java no tiene destructores ni tiene un equivalente directo. Sin embargo, es un lenguaje potente y una de las razones es el recolector de basura. Java nos proporciona un recolector de basura que funciona de manera similar a un destructor. El recolector de basura, un programa (Thread) que se ejecuta en Java Virtual Machine (JVM), libera automáticamente la memoria al eliminar los objetos no utilizados.

En Java, este recolector de basura maneja eficientemente la asignación y desasignación de memoria. Cuando se completa el bucle de vida de un objeto, el recolector de basura aparece, elimina ese objeto y desasigna o libera la memoria ocupada por ese objeto. Este método también se conoce como finalizadores que no son deterministas. Pero el problema es que la invocación de este método (finalizadores) no está garantizada, ya que invoca implícitamente.

Trabajo de destructores y método finalize() en Java

Cuando se crea un objeto en Java, ocupa memoria en el montón. Los subprocesos utilizan estos objetos, y si un subproceso no utiliza el objeto, el recolector de basura los puede utilizar para la recolección de elementos no utilizados. Por lo tanto, la memoria ocupada por estos objetos ahora queda vacía y puede ser utilizada por cualquier entidad nueva. Cuando el recolector de basura destruye cualquier objeto, Java Runtime Environment (JRE) llama al método finalize() para cerrar las conexiones, como las conexiones de red y de base de datos.

No podemos obligar al recolector de basura a ejecutar y destruir el objeto. Pero Java aquí proporciona un método alternativo. El objeto java nos proporciona el método finalize(), que funciona de manera similar a un destructor. Sin embargo, solo se puede llamar una vez.

El punto a entender es que el método finalize() no es un destructor pero proporciona seguridad adicional y además asegura recursos externos como cerrar el archivo antes de cerrar la operación (programa) y funciona bastante similar al destructor.

Vea el código a continuación.

public class Dest_java {
  public static void main(String[] args) {
    Dest_java des = new Dest_java();
    des.finalize();
    des = null;
    System.gc();
    System.out.print("main() method ");
  }
  protected void finalize() {
    System.out.print("Destroyed ");
  }
}

Producción :

Destroyed main() method Destroyed