logo

Destructeur Java

En Java, lorsque l'on crée un objet de la classe, il occupe de l'espace dans la mémoire (tas). Si nous ne supprimons pas ces objets, ils restent en mémoire et occupent un espace inutile qui n'est pas correct du point de vue de la programmation. Pour résoudre ce problème, nous utilisons le destructeur . Dans cette section, nous discuterons de l'option alternative au destructeur en Java . Nous apprendrons également à utiliser le finaliser() méthode comme destructeur.

Le destructeur est l'opposé du constructeur. Le constructeur est utilisé pour initialiser les objets tandis que le destructeur est utilisé pour supprimer ou détruire l'objet qui libère la ressource occupée par l'objet.

Rappelez-vous que il n'y a pas de concept de destructeur en Java . À la place du destructeur, Java fournit le garbage collector qui fonctionne de la même manière que le destructeur. Le garbage collector est un programme (thread) qui s'exécute sur le JVM . Il supprime automatiquement les objets inutilisés (objets qui ne sont plus utilisés) et libère la mémoire. Le programmeur n’a pas besoin de gérer la mémoire manuellement. Il peut être sujet aux erreurs, vulnérable et entraîner une fuite de mémoire.

Qu’est-ce que le destructeur en Java ?

Il s'agit d'une méthode spéciale qui est automatiquement appelée lorsqu'un objet n'est plus utilisé. Lorsqu'un objet termine son cycle de vie, le garbage collector supprime cet objet et libère ou libère la mémoire occupée par l'objet.

Il est également connu sous le nom finaliseurs qui ne sont pas déterministes. Dans Java , l'allocation et la désallocation des objets gérés par le Éboueur . L'invocation des finaliseurs n'est pas garantie car elle invoque implicitement.

Avantages du Destructeur

  • Il libère les ressources occupées par l'objet.
  • Aucun appel explicite n'est requis, il est automatiquement invoqué à la fin de l'exécution du programme.
  • Il n’accepte aucun paramètre et ne peut être surchargé.

Comment fonctionne le destructeur ?

Lorsque l'objet est créé, il occupe l'espace du tas. Ces objets sont utilisés par les threads. Si les objets ne sont plus utilisés par le thread, ils deviennent éligibles pour le garbage collection. La mémoire occupée par cet objet est désormais disponible pour les nouveaux objets en cours de création. Il est à noter que lorsque le garbage collector détruit l'objet, le JRE appelle la méthode finalize() pour fermer les connexions telles que la base de données et la connexion réseau.

De ce qui précède, nous pouvons conclure que l'utilisation d'un destructeur et d'un ramasse-miettes constitue le niveau d'interférence du développeur dans la gestion de la mémoire. C'est la principale différence entre les deux. Le destructeur indique exactement quand l'objet sera détruit. En Java, le garbage collector effectue automatiquement le même travail. Ces deux approches de gestion de la mémoire ont des effets positifs et négatifs. Mais le principal problème est que le développeur a parfois besoin d’un accès immédiat à la gestion de la mémoire.

Méthode Java finalize()

Il est difficile pour le programmeur d'exécuter de force le garbage collector pour détruire l'objet. Mais Java offre une autre façon de faire de même. La classe Java Object fournit le finaliser() méthode qui fonctionne de la même manière que le destructeur. La syntaxe de la méthode finalize() est la suivante :

Syntaxe:

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

Ce n'est pas un destructeur mais il offre une sécurité supplémentaire. Il garantit l'utilisation de ressources externes comme la fermeture du fichier, etc. avant d'arrêter le programme. Nous pouvons l'appeler en utilisant la méthode elle-même ou en invoquant la méthode System.runFinalizersOnExit (vrai) .

  • Il s'agit d'une méthode protégée de la classe Object définie dans le package java.lang.
  • Il ne peut être appelé qu'une seule fois.
  • Nous devons appeler explicitement la méthode finalize() si nous voulons remplacer la méthode.
  • Le gc() est une méthode de JVM exécutée par le Garbage Collector. Il s'appelle lorsque la mémoire du tas est pleine et nécessite plus de mémoire pour les nouveaux objets arrivant.
  • À l'exception des exceptions non vérifiées, la JVM ignore toutes les exceptions générées par la méthode finalize().

Exemple de destructeur

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

Sortir:

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