logo

Java-vernietiger

Als we in Java een object van de klasse maken, neemt het wat ruimte in het geheugen in beslag (heap). Als we deze objecten niet verwijderen, blijft het in het geheugen en neemt het onnodige ruimte in beslag die niet rechtop staat vanuit het oogpunt van programmeren. Om dit probleem op te lossen gebruiken wij de torpedojager . In deze sectie bespreken we de alternatieve optie voor de vernietiger op Java . We zullen ook leren hoe we de afronden() methode als destructor.

De torpedojager is het tegenovergestelde van de constructor. De constructor wordt gebruikt om objecten te initialiseren, terwijl de destructor wordt gebruikt om het object te verwijderen of te vernietigen waardoor de bron vrijkomt die door het object wordt ingenomen.

Onthoud dat er is geen concept van destructor op Java . In plaats van de destructor biedt Java de garbage collector die hetzelfde werkt als de destructor. De garbage collector is een programma (thread) dat draait op de JVM . Het verwijdert automatisch de ongebruikte objecten (objecten die niet langer worden gebruikt) en maakt geheugen vrij. De programmeur hoeft het geheugen niet handmatig te beheren. Het kan foutgevoelig en kwetsbaar zijn en tot een geheugenlek leiden.

Wat is de destructor op Java?

Het is een speciale methode die automatisch wordt aangeroepen wanneer een object niet langer wordt gebruikt. Wanneer een object zijn levenscyclus voltooit, verwijdert de garbage collector dat object en maakt het de toewijzing van het geheugen dat door het object wordt ingenomen ongedaan of geeft het vrij.

Het is ook bekend als finalisten die niet-deterministisch zijn. In Java , de allocatie en deallocatie van objecten die worden afgehandeld door de vuilnisman . Het aanroepen van finalizers is niet gegarandeerd, omdat deze impliciet worden aangeroepen.

Voordelen van Destructor

  • Het maakt de bronnen vrij die door het object worden ingenomen.
  • Er is geen expliciete oproep vereist; deze wordt automatisch aangeroepen aan het einde van de programma-uitvoering.
  • Het accepteert geen enkele parameter en kan niet worden overbelast.

Hoe werkt destructor?

Wanneer het object wordt gemaakt, neemt het de ruimte in de heap in beslag. Deze objecten worden gebruikt door de draden. Als de objecten niet langer door de thread worden gebruikt, komen ze in aanmerking voor de garbage collection. Het geheugen dat door dat object wordt ingenomen, is nu beschikbaar voor nieuwe objecten die worden gemaakt. Opgemerkt wordt dat wanneer de garbage collector het object vernietigt, de JRE de methode finalize() aanroept om de verbindingen, zoals de database- en netwerkverbinding, te sluiten.

Uit het bovenstaande kunnen we concluderen dat het gebruik van de destructor en de garbage collector het niveau is van de interferentie van de ontwikkelaar met het geheugenbeheer. Het is het belangrijkste verschil tussen de twee. De destructor geeft precies aan wanneer het object zal worden vernietigd. Terwijl in Java de garbage collector automatisch hetzelfde werk doet. Deze twee benaderingen van geheugenbeheer hebben positieve en negatieve effecten. Maar het belangrijkste probleem is dat de ontwikkelaar soms onmiddellijke toegang tot geheugenbeheer nodig heeft.

Java finalize()-methode

Het is moeilijk voor de programmeur om de garbage collector met kracht uit te voeren om het object te vernietigen. Maar Java biedt een alternatieve manier om hetzelfde te doen. De Java Object-klasse biedt de afronden() methode die hetzelfde werkt als de destructor. De syntaxis van de methode finalize() is als volgt:

Syntaxis:

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

Het is geen vernietiger, maar het biedt extra veiligheid. Het zorgt ervoor dat externe bronnen worden gebruikt, zoals het sluiten van het bestand, enz. voordat het programma wordt afgesloten. We kunnen het aanroepen door de methode zelf te gebruiken of door de methode aan te roepen System.runFinalizersOnExit(waar) .

  • Het is een beschermde methode van de klasse Object die is gedefinieerd in het pakket java.lang.
  • Er kan slechts één keer gebeld worden.
  • We moeten de methode finalize() expliciet aanroepen als we de methode willen overschrijven.
  • De gc() is een JVM-methode die wordt uitgevoerd door de Garbage Collector. Het wordt geactiveerd wanneer het heap-geheugen vol is en er is meer geheugen nodig voor nieuwe binnenkomende objecten.
  • Behalve de niet-gecontroleerde uitzonderingen negeert de JVM alle uitzonderingen die optreden door de finalize() -methode.

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

Uitgang:

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