logo

Java Destructor

En Java, cuando creamos un objeto de la clase, ocupa algo de espacio en la memoria (montón). Si no eliminamos estos objetos, permanecen en la memoria y ocupan un espacio innecesario que no es correcto desde el aspecto de la programación. Para resolver este problema utilizamos el destructor . En esta sección, discutiremos la opción alternativa a la destructor in Java . Además, también aprenderemos a utilizar el finalizar() método como destructor.

El destructor es lo opuesto al constructor. El constructor se usa para inicializar objetos mientras que el destructor se usa para eliminar o destruir el objeto que libera el recurso ocupado por el objeto.

Recuerda eso No existe el concepto de destructor en Java. . En lugar del destructor, Java proporciona un recolector de basura que funciona igual que el destructor. El recolector de basura es un programa (hilo) que se ejecuta en el JVM . Elimina automáticamente los objetos no utilizados (objetos que ya no se utilizan) y libera memoria. El programador no necesita gestionar la memoria manualmente. Puede ser propenso a errores, vulnerable y provocar una pérdida de memoria.

¿Qué es el destructor en Java?

Es un método especial que se llama automáticamente cuando un objeto ya no se utiliza. Cuando un objeto completa su ciclo de vida, el recolector de basura lo elimina y desasigna o libera la memoria ocupada por el objeto.

También se le conoce como finalizadores que no son deterministas. En Java , la asignación y desasignación de objetos manejados por el recolector de basura . La invocación de finalizadores no está garantizada porque se invoca implícitamente.

Ventajas del destructor

  • Libera los recursos ocupados por el objeto.
  • No se requiere ninguna llamada explícita, se invoca automáticamente al final de la ejecución del programa.
  • No acepta ningún parámetro y no se puede sobrecargar.

¿Cómo funciona el destructor?

Cuando se crea el objeto, ocupa el espacio en el montón. Estos objetos son utilizados por los hilos. Si el subproceso ya no utiliza los objetos, se vuelve elegible para la recolección de basura. La memoria ocupada por ese objeto ahora está disponible para los nuevos objetos que se están creando. Cabe señalar que cuando el recolector de basura destruye el objeto, el JRE llama al método finalize() para cerrar las conexiones, como la base de datos y la conexión de red.

De lo anterior, podemos concluir que el uso de destructores y recolectores de basura es el nivel de interferencia del desarrollador en la administración de la memoria. Es la principal diferencia entre los dos. El destructor notifica exactamente cuándo será destruido el objeto. Mientras que en Java el recolector de basura hace el mismo trabajo automáticamente. Estos dos enfoques para la gestión de la memoria tienen efectos positivos y negativos. Pero el problema principal es que a veces el desarrollador necesita acceso inmediato a la gestión de la memoria.

Método Java finalizar()

Es difícil para el programador ejecutar por la fuerza el recolector de basura para destruir el objeto. Pero Java ofrece una forma alternativa de hacer lo mismo. La clase de objeto Java proporciona la finalizar() método que funciona igual que el destructor. La sintaxis del método finalize() es la siguiente:

Sintaxis:

 protected void finalize throws Throwable() { //resources to be close } 

No es un destructor pero proporciona seguridad extra. Garantiza el uso de recursos externos como cerrar el archivo, etc. antes de cerrar el programa. Podemos llamarlo usando el método en sí o invocando el método. System.runFinalizersOnExit (verdadero) .

  • Es un método protegido de la clase Object que se define en el paquete java.lang.
  • Sólo se puede llamar una vez.
  • Necesitamos llamar explícitamente al método finalize() si queremos anular el método.
  • gc() es un método de JVM ejecutado por Garbage Collector. Se invoca cuando la memoria del montón está llena y requiere más memoria para los nuevos objetos que llegan.
  • Excepto por las excepciones no marcadas, la JVM ignora todas las excepciones que ocurren mediante el método finalize().

Ejemplo de destructor

DestructorExample.java

 public class DestructorExample { public static void main(String[] args) { DestructorExample de = new DestructorExample (); de.finalize(); de = null; System.gc(); System.out.println('Inside the main() method'); } protected void finalize() { System.out.println('Object is destroyed by the Garbage Collector'); } } 

Producción:

 Object is destroyed by the Garbage Collector Inside the main() method Object is destroyed by the Garbage Collector