Destructeur en Java

Hiten Kanwar 12 octobre 2023
Destructeur en Java

Le destructeur est l’opposé d’un constructeur. D’une part, lorsqu’un constructeur est utilisé pour initialiser un objet, un destructeur est utilisé pour détruire (supprimer) un objet qui libère la ressource occupée par l’objet.

Ce tutoriel abordera les destructeurs en Java, leur fonctionnement et leurs méthodes.

Java n’a pas de destructeurs ni d’équivalent direct. Néanmoins, c’est un langage puissant, et l’une des raisons en est le ramasse-miettes. Java nous fournit un ramasse-miettes qui fonctionne comme un destructeur. Le ramasse-miettes, un programme (Thread) qui s’exécute sur Java Virtual Machine (JVM), libère automatiquement la mémoire en supprimant les objets inutilisés.

En Java, l’allocation et la désallocation de mémoire sont gérées efficacement par ce ramasse-miettes. Lorsque le cycle de vie d’un objet est terminé, le ramasse-miettes apparaît, supprime cet objet et libère ou libère la mémoire occupée par cet objet. Cette méthode est également connue sous le nom de finaliseurs non déterministes. Mais le problème est que l’invocation de cette méthode (finaliseurs) n’est pas garantie car elle invoque implicitement.

Fonctionnement des destructeurs et de la méthode finalize() en Java

Lorsqu’un objet est créé en Java, il occupe de la mémoire dans le tas. Les threads utilisent en outre ces objets, et si un thread n’utilise pas l’objet, ils deviennent éligibles pour le ramasse-miettes par le ramasse-miettes. Ainsi, la mémoire occupée par ces objets devient maintenant vacante et peut être davantage utilisée par toute nouvelle entité. Lorsque le ramasse-miettes détruit un objet, l’environnement d’exécution Java (JRE) appelle la méthode finalize() pour fermer les connexions, telles que les connexions réseau et de base de données.

Nous ne pouvons pas forcer le ramasse-miettes à exécuter et à détruire l’objet. Mais Java fournit ici une méthode alternative. L’objet java nous fournit la méthode finalize(), qui fonctionne de manière similaire à un destructeur. Cependant, il ne peut être appelé qu’une seule fois.

Le point à comprendre est que la méthode finalize() n’est pas un destructeur mais offre une sécurité supplémentaire et garantit en outre des ressources externes telles que la fermeture du fichier avant de fermer l’opération (programme) et fonctionne de manière assez similaire au destructeur.

Voir le code ci-dessous.

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 ");
  }
}

Production:

Destroyed main() method Destroyed