logo

Java Destroyer

Javassa, kun luomme luokan objektin, se vie jonkin verran tilaa muistissa (kasa). Jos emme poista näitä objekteja, ne jäävät muistiin ja vievät tarpeetonta tilaa, joka ei ole ohjelmoinnin kannalta pystyssä. Tämän ongelman ratkaisemiseksi käytämme hävittäjä . Tässä osiossa keskustelemme vaihtoehtoisesta vaihtoehdosta Destructor Javassa . Lisäksi opimme käyttämään viimeistellä () menetelmä tuhoajana.

The hävittäjä on rakentajan vastakohta. Rakentajaa käytetään objektien alustamiseen, kun taas tuhoajaa käytetään objektin poistamiseen tai tuhoamiseen, joka vapauttaa objektin varaaman resurssin.

Muista se Javalla ei ole destructorin käsitettä . Destruktorin sijasta Java tarjoaa roskakeräimen, joka toimii samalla tavalla kuin tuhoaja. Roskakeräin on ohjelma (säie), joka toimii JVM . Se poistaa automaattisesti käyttämättömät kohteet (esineet, joita ei enää käytetä) ja vapauttaa muistia. Ohjelmoijan ei tarvitse hallita muistia manuaalisesti. Se voi olla virhealtis, haavoittuva ja voi johtaa muistivuotoon.

Mikä on Java-destructor?

Se on erityinen menetelmä, jota kutsutaan automaattisesti, kun objektia ei enää käytetä. Kun objekti saavuttaa elinkaarensa, roskankerääjä poistaa kyseisen objektin ja purkaa tai vapauttaa objektin varaaman muistin.

Se tunnetaan myös nimellä viimeistelijöitä jotka ovat ei-deterministisiä. Sisään Java , käsittelemien kohteiden allokointi ja purkaminen roskankerääjä . Viimeistelijöiden kutsumista ei taata, koska se kutsuu implisiittisesti.

Destructorin edut

  • Se vapauttaa objektin käyttämät resurssit.
  • Erityistä kutsua ei vaadita, se kutsutaan automaattisesti ohjelman suorituksen lopussa.
  • Se ei hyväksy mitään parametreja eikä sitä voi ylikuormittaa.

Kuinka tuhoaja toimii?

Kun objekti luodaan, se vie kasan tilan. Säikeet käyttävät näitä objekteja. Jos säie ei enää käytä esineitä, siitä tulee kelvollinen roskienkeräykseen. Objektin käyttämä muisti on nyt käytettävissä uusille luotaville objekteille. On huomattava, että kun roskankerääjä tuhoaa objektin, JRE kutsuu finalize()-menetelmää sulkeakseen yhteydet, kuten tietokanta- ja verkkoyhteyden.

Yllä olevasta voimme päätellä, että destructorin ja roskakeräimen käyttö on taso, jolla kehittäjä häiritsee muistin hallintaa. Se on tärkein ero näiden kahden välillä. Tuhoaja ilmoittaa tarkalleen milloin esine tuhotaan. Javassa roskienkerääjä tekee saman työn automaattisesti. Näillä kahdella muistinhallinnan lähestymistavalla on positiivisia ja negatiivisia vaikutuksia. Mutta pääongelma on, että joskus kehittäjä tarvitsee välittömän pääsyn muistinhallintaan.

Java finalize() -menetelmä

Ohjelmoijan on vaikea suorittaa väkisin roskankerääjä tuhotakseen kohteen. Mutta Java tarjoaa vaihtoehtoisen tavan tehdä sama. Java Object -luokka tarjoaa viimeistellä () menetelmä, joka toimii samalla tavalla kuin tuhoaja. Finalize()-menetelmän syntaksi on seuraava:

Syntaksi:

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

Se ei ole tuhoaja, mutta se tarjoaa lisäturvaa. Se varmistaa ulkoisten resurssien käytön, kuten tiedoston sulkemisen jne. ennen ohjelman sulkemista. Voimme kutsua sitä käyttämällä itse menetelmää tai kutsumalla menetelmää System.runFinalizersOnExit(true) .

  • Se on Object-luokan suojattu menetelmä, joka on määritelty java.lang-paketissa.
  • Sitä voidaan kutsua vain kerran.
  • Meidän on kutsuttava finalize()-menetelmää eksplisiittisesti, jos haluamme ohittaa menetelmän.
  • gc() on JVM:n menetelmä, jonka roskakeräilijä suorittaa. Se kutsuu, kun keon muisti on täynnä ja vaatii enemmän muistia uusille saapuville objekteille.
  • Valitsemattomia poikkeuksia lukuun ottamatta JVM jättää huomioimatta kaikki finalize()-metodin aiheuttamat poikkeukset.

Esimerkki Destructorista

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

Lähtö:

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