logo

Java Destroyer

I Java, når vi opretter et objekt af klassen, optager det noget plads i hukommelsen (heap). Hvis vi ikke sletter disse objekter, forbliver de i hukommelsen og optager unødvendig plads, der ikke er oprejst set i forhold til programmering. For at løse dette problem bruger vi destroyer . I dette afsnit vil vi diskutere den alternative mulighed til destruktor i Java . Vi vil også lære at bruge afslutte() metode som destruktor.

Det destroyer er det modsatte af konstruktøren. Konstruktøren bruges til at initialisere objekter, mens destruktoren bruges til at slette eller ødelægge objektet, der frigiver ressourcen optaget af objektet.

Huske på, at der er intet begreb om destructor i Java . I stedet for destruktoren leverer Java skraldesamleren, der fungerer på samme måde som destruktoren. Skraldesamleren er et program (tråd), der kører på JVM . Den sletter automatisk de ubrugte objekter (objekter, der ikke længere bruges) og frigør hukommelsen. Programmøren har ikke behov for at administrere hukommelsen manuelt. Det kan være fejltilbøjeligt, sårbart og kan føre til en hukommelseslækage.

Hvad er destruktoren i Java?

Det er en speciel metode, der automatisk bliver kaldt, når et objekt ikke længere bruges. Når et objekt fuldfører sin livscyklus, sletter skraldemand det objekt og deallokerer eller frigiver hukommelsen optaget af objektet.

Det er også kendt som finalister som er ikke-deterministiske. I Java , tildeling og deallokering af objekter, der håndteres af skraldemand . Påkaldelsen af ​​færdigbehandlere er ikke garanteret, fordi den påberåber sig implicit.

Fordele ved Destructor

  • Det frigiver de ressourcer, som objektet optager.
  • Der kræves ikke noget eksplicit opkald, det kaldes automatisk i slutningen af ​​programafviklingen.
  • Den accepterer ingen parameter og kan ikke overbelastes.

Hvordan virker destructor?

Når objektet er skabt, optager det pladsen i dyngen. Disse objekter bruges af trådene. Hvis genstandene ikke længere bruges af tråden, bliver de berettiget til affaldsindsamlingen. Hukommelsen optaget af dette objekt er nu tilgængelig for nye objekter, der bliver oprettet. Det bemærkes, at når garbage collector ødelægger objektet, kalder JRE finalize()-metoden for at lukke forbindelser såsom database og netværksforbindelse.

Ud fra ovenstående kan vi konkludere, at brugen af ​​destruktoren og skraldopsamleren er niveauet for udviklerens interferens med hukommelseshåndtering. Det er hovedforskellen mellem de to. Destruktoren meddeler præcis, hvornår genstanden vil blive ødelagt. Mens du er i Java, udfører affaldssamleren det samme arbejde automatisk. Disse to tilgange til hukommelseshåndtering har positive og negative effekter. Men hovedproblemet er, at nogle gange har udvikleren brug for øjeblikkelig adgang til hukommelsesstyring.

Java finalize() metode

Det er svært for programmøren med magt at henrette skraldeopsamleren for at ødelægge objektet. Men Java giver en alternativ måde at gøre det samme på. Java Object-klassen giver afslutte() metode, der fungerer på samme måde som destruktoren. Syntaksen for finalize()-metoden er som følger:

Syntaks:

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

Det er ikke en destruktor, men det giver ekstra sikkerhed. Det sikrer brugen af ​​eksterne ressourcer som lukning af filen osv. før programmet lukkes ned. Vi kan kalde det ved at bruge selve metoden eller påberåbe sig metoden System.runFinalizersOnExit(true) .

  • Det er en beskyttet metode af Object-klassen, der er defineret i java.lang-pakken.
  • Det kan kun kaldes én gang.
  • Vi skal kalde finalize() metoden eksplicit, hvis vi ønsker at tilsidesætte metoden.
  • gc() er en JVM-metode, der udføres af Garbage Collector. Den kalder på, når heap-hukommelsen er fuld og kræver mere hukommelse til nye ankommende objekter.
  • Bortset fra de umarkerede undtagelser ignorerer JVM alle de undtagelser, der opstår med finalize()-metoden.

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

Produktion:

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