logo

Java iznīcinātājs

Programmā Java, kad mēs izveidojam klases objektu, tas aizņem kādu vietu atmiņā (kaudzē). Ja mēs šos objektus neizdzēšam, tie paliek atmiņā un aizņem nevajadzīgu vietu, kas no programmēšanas viedokļa nav vertikāla. Lai atrisinātu šo problēmu, mēs izmantojam iznīcinātājs . Šajā sadaļā mēs apspriedīsim alternatīvu opciju destruktors Java valodā . Mēs arī iemācīsimies izmantot pabeigt () metode kā destruktors.

The iznīcinātājs ir pretstats konstruktoram. Konstruktors tiek izmantots objektu inicializācijai, savukārt iznīcinātājs tiek izmantots, lai dzēstu vai iznīcinātu objektu, kas atbrīvo objekta aizņemto resursu.

Atcerieties, ka Java valodā nav destruktora jēdziena . Destruktora vietā Java nodrošina atkritumu savācēju, kas darbojas tāpat kā iznīcinātājs. Atkritumu savācējs ir programma (pavediens), kas darbojas uz JVM . Tas automātiski izdzēš neizmantotos objektus (objektus, kas vairs netiek izmantoti) un atbrīvo atmiņu. Programmētājam nav jāpārvalda atmiņa manuāli. Tā var būt kļūdaina, neaizsargāta un var izraisīt atmiņas noplūdi.

Kas ir Java destruktors?

Tā ir īpaša metode, kas automātiski tiek izsaukta, kad objekts vairs netiek izmantots. Kad objekts pabeidz savu dzīves ciklu, atkritumu savācējs izdzēš šo objektu un atbrīvo vai atbrīvo objekta aizņemto atmiņu.

Tas ir pazīstams arī kā finālisti kas nav deterministiski. In Java , to objektu piešķiršana un pārvietošana, kurus apstrādā atkritumu savācējs . Pabeidzēju izsaukšana netiek garantēta, jo tā tiek izsaukta netieši.

Destructor priekšrocības

  • Tas atbrīvo objekta aizņemtos resursus.
  • Nav nepieciešams tiešs izsaukums, tas tiek automātiski izsaukts programmas izpildes beigās.
  • Tas nepieņem nevienu parametru un to nevar pārslogot.

Kā darbojas destruktors?

Kad objekts ir izveidots, tas aizņem vietu kaudzē. Šos objektus izmanto pavedieni. Ja pavedieni vairs neizmanto objektus, tie kļūst piemēroti atkritumu savākšanai. Šī objekta aizņemtā atmiņa tagad ir pieejama jauniem objektiem, kas tiek veidoti. Tiek atzīmēts, ka tad, kad atkritumu savācējs iznīcina objektu, JRE izsauc finalize() metodi, lai aizvērtu savienojumus, piemēram, datu bāzes un tīkla savienojumu.

No iepriekš minētā mēs varam secināt, ka iznīcinātāja un atkritumu savācēja izmantošana ir izstrādātāja iejaukšanās atmiņas pārvaldības līmenis. Tā ir galvenā atšķirība starp abiem. Iznīcinātājs precīzi paziņo, kad objekts tiks iznīcināts. Atrodoties Java, atkritumu savācējs automātiski veic to pašu darbu. Šīm divām atmiņas pārvaldības pieejām ir pozitīva un negatīva ietekme. Bet galvenā problēma ir tā, ka dažreiz izstrādātājam ir nepieciešama tūlītēja piekļuve atmiņas pārvaldībai.

Java finalize() metode

Programmētājam ir grūti piespiedu kārtā izpildīt atkritumu savācēju, lai iznīcinātu objektu. Taču Java nodrošina alternatīvu veidu, kā to izdarīt. Java objektu klase nodrošina pabeigt () metode, kas darbojas tāpat kā destruktors. Finalize() metodes sintakse ir šāda:

Sintakse:

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

Tas nav iznīcinātājs, bet tas nodrošina papildu drošību. Tas nodrošina ārējo resursu izmantošanu, piemēram, faila aizvēršanu utt. pirms programmas izslēgšanas. Mēs to varam izsaukt, izmantojot pašu metodi vai izsaucot metodi System.runFinalizersOnExit(true) .

  • Tā ir aizsargāta objekta klases metode, kas definēta pakotnē java.lang.
  • To var izsaukt tikai vienu reizi.
  • Ja mēs vēlamies ignorēt metodi, mums ir skaidri jāizsauc metode finalize().
  • Gc() ir JVM metode, ko izpilda atkritumu savācējs. Tas izsauc, kad kaudzes atmiņa ir pilna, un ir nepieciešams vairāk atmiņas jauniem objektiem.
  • Izņemot neatzīmētos izņēmumus, JVM ignorē visus izņēmumus, kas rodas, izmantojot metodi finalize().

Destruktora piemērs

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

Izvade:

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