logo

Java Destroyer

I Java, når vi lager et objekt av klassen, opptar det litt plass i minnet (heap). Hvis vi ikke sletter disse objektene, forblir de i minnet og opptar unødvendig plass som ikke er oppreist fra programmeringsaspektet. For å løse dette problemet bruker vi ødelegger . I denne delen vil vi diskutere det alternative alternativet til destruktor i Java . Vi vil også lære hvordan du bruker fullføre() metode som en destruktor.

De ødelegger er det motsatte av konstruktøren. Konstruktøren brukes til å initialisere objekter mens destruktoren brukes til å slette eller ødelegge objektet som frigjør ressursen som er okkupert av objektet.

Husk at det er ikke noe begrep om destruktor i Java . I stedet for destruktoren gir Java søppelsamleren som fungerer på samme måte som destruktoren. Søppelsamleren er et program (tråd) som kjører på JVM . Den sletter automatisk de ubrukte objektene (objekter som ikke lenger brukes) og frigjør minnet. Programmereren trenger ikke å administrere minne manuelt. Det kan være utsatt for feil, sårbart og kan føre til en minnelekkasje.

Hva er destruktoren i Java?

Det er en spesiell metode som automatisk blir kalt når et objekt ikke lenger brukes. Når et objekt fullfører sin livssyklus, sletter søppelsamleren det objektet og tildeler eller frigjør minnet som er okkupert av objektet.

Det er også kjent som finalister som er ikke-deterministiske. I Java , tildeling og deallokering av objekter som håndteres av søppelmann . Påkallelsen av sluttbehandlere er ikke garantert fordi den påkaller implisitt.

Fordeler med Destructor

  • Det frigjør ressursene som er okkupert av objektet.
  • Ingen eksplisitt anrop er nødvendig, den kalles automatisk på slutten av programkjøringen.
  • Den godtar ingen parameter og kan ikke overbelastes.

Hvordan fungerer destructor?

Når objektet er opprettet, opptar det plassen i haugen. Disse objektene brukes av trådene. Hvis gjenstandene ikke lenger brukes av tråden, blir de kvalifisert for søppelsamlingen. Minnet som er okkupert av det objektet er nå tilgjengelig for nye objekter som blir opprettet. Det bemerkes at når søppelsamleren ødelegger objektet, kaller JRE finalize()-metoden for å lukke forbindelsene som database og nettverkstilkobling.

Fra det ovenstående kan vi konkludere med at bruk av destruktoren og søppelsamleren er nivået på utviklerens forstyrrelse av minnehåndtering. Det er hovedforskjellen mellom de to. Destruktoren varsler nøyaktig når objektet vil bli ødelagt. Mens i Java gjør søppelsamleren det samme arbeidet automatisk. Disse to tilnærmingene til hukommelseshåndtering har positive og negative effekter. Men hovedproblemet er at noen ganger trenger utvikleren umiddelbar tilgang til minneadministrasjon.

Java finalize() Metode

Det er vanskelig for programmereren å tvinge søppelsamleren til å ødelegge objektet. Men Java gir en alternativ måte å gjøre det samme på. Java Object-klassen gir fullføre() metode som fungerer på samme måte som destruktoren. Syntaksen til finalize()-metoden er som følger:

Syntaks:

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

Det er ikke en destruktor, men det gir ekstra sikkerhet. Det sikrer bruk av eksterne ressurser som å lukke filen, etc. før du slår av programmet. Vi kan kalle det ved å bruke selve metoden eller påkalle metoden System.runFinalizersOnExit(true) .

  • Det er en beskyttet metode av Object-klassen som er definert i java.lang-pakken.
  • Det kan bare kalles én gang.
  • Vi må kalle finalize()-metoden eksplisitt hvis vi ønsker å overstyre metoden.
  • Gc() er en JVM-metode utført av Garbage Collector. Den påkaller når haugminnet er fullt og krever mer minne for nye ankommende objekter.
  • Bortsett fra de ukontrollerte unntakene, ignorerer JVM alle unntakene som oppstå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'); } } 

Produksjon:

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