logo

Java-Zerstörer

Wenn wir in Java ein Objekt der Klasse erstellen, belegt es etwas Platz im Speicher (Heap). Wenn wir diese Objekte nicht löschen, bleiben sie im Speicher und belegen unnötigen Platz, der aus programmtechnischen Gründen nicht in Ordnung ist. Um dieses Problem zu lösen, verwenden wir die Zerstörer . In diesem Abschnitt besprechen wir die alternative Option zum Destruktor in Java . Außerdem lernen wir, wie man das verwendet finalisieren() Methode als Destruktor.

Der Zerstörer ist das Gegenteil des Konstruktors. Der Konstruktor wird zum Initialisieren von Objekten verwendet, während der Destruktor zum Löschen oder Zerstören des Objekts verwendet wird, wodurch die vom Objekt belegte Ressource freigegeben wird.

Erinnere dich daran In Java gibt es kein Destruktorkonzept . Anstelle des Destruktors stellt Java den Garbage Collector bereit, der genauso funktioniert wie der Destruktor. Der Garbage Collector ist ein Programm (Thread), das auf dem läuft JVM . Es löscht automatisch die nicht verwendeten Objekte (Objekte, die nicht mehr verwendet werden) und gibt den Speicher frei. Der Programmierer muss den Speicher nicht manuell verwalten. Es kann fehleranfällig und anfällig sein und zu einem Speicherverlust führen.

Was ist der Destruktor in Java?

Es handelt sich um eine spezielle Methode, die automatisch aufgerufen wird, wenn ein Objekt nicht mehr verwendet wird. Wenn ein Objekt seinen Lebenszyklus abschließt, löscht der Garbage Collector dieses Objekt und gibt den vom Objekt belegten Speicher frei oder gibt ihn frei.

Es ist auch bekannt als Finalisierer die nicht deterministisch sind. In Java , die Zuweisung und Freigabe von Objekten, die von der verwaltet werden Müllsammler . Der Aufruf von Finalizern ist nicht garantiert, da er implizit aufgerufen wird.

Vorteile von Destructor

  • Es gibt die vom Objekt belegten Ressourcen frei.
  • Es ist kein expliziter Aufruf erforderlich, er wird automatisch am Ende der Programmausführung aufgerufen.
  • Es akzeptiert keine Parameter und kann nicht überladen werden.

Wie funktioniert der Destruktor?

Wenn das Objekt erstellt wird, belegt es den Platz im Heap. Diese Objekte werden von den Threads verwendet. Wenn die Objekte nicht mehr vom Thread verwendet werden, kommen sie für die Garbage Collection in Frage. Der von diesem Objekt belegte Speicher steht nun für neu erstellte Objekte zur Verfügung. Es ist zu beachten, dass die JRE die finalize()-Methode aufruft, um die Verbindungen wie Datenbank- und Netzwerkverbindung zu schließen, wenn der Garbage Collector das Objekt zerstört.

Aus dem oben Gesagten können wir schließen, dass die Verwendung des Destruktors und des Garbage Collectors den Grad des Eingriffs des Entwicklers in die Speicherverwaltung darstellt. Es ist der Hauptunterschied zwischen den beiden. Der Destruktor benachrichtigt genau, wann das Objekt zerstört wird. Während in Java der Garbage Collector die gleiche Arbeit automatisch erledigt. Diese beiden Ansätze zur Speicherverwaltung haben positive und negative Auswirkungen. Das Hauptproblem besteht jedoch darin, dass der Entwickler manchmal sofortigen Zugriff auf die Speicherverwaltung benötigt.

Java finalize()-Methode

Für den Programmierer ist es schwierig, den Garbage Collector gewaltsam auszuführen, um das Objekt zu zerstören. Aber Java bietet eine alternative Möglichkeit, dasselbe zu tun. Die Java Object-Klasse stellt die bereit finalisieren() Methode, die genauso funktioniert wie der Destruktor. Die Syntax der finalize()-Methode lautet wie folgt:

Syntax:

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

Es ist kein Destruktor, bietet aber zusätzliche Sicherheit. Es stellt sicher, dass externe Ressourcen wie das Schließen der Datei usw. verwendet werden, bevor das Programm beendet wird. Wir können es aufrufen, indem wir die Methode selbst verwenden oder die Methode aufrufen System.runFinalizersOnExit(true) .

  • Es handelt sich um eine geschützte Methode der Object-Klasse, die im Paket java.lang definiert ist.
  • Es kann nur einmal aufgerufen werden.
  • Wir müssen die finalize()-Methode explizit aufrufen, wenn wir die Methode überschreiben möchten.
  • gc() ist eine JVM-Methode, die vom Garbage Collector ausgeführt wird. Es wird aufgerufen, wenn der Heap-Speicher voll ist und mehr Speicher für neu ankommende Objekte benötigt.
  • Mit Ausnahme der ungeprüften Ausnahmen ignoriert die JVM alle Ausnahmen, die durch die Methode finalize() auftreten.

Beispiel für einen Destruktor

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

Ausgabe:

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