logo

Java naikintojas

Java, kai sukuriame klasės objektą, jis užima tam tikrą vietą atmintyje (krūvoje). Jei šių objektų neištrinsime, jie lieka atmintyje ir užima nereikalingą vietą, kuri programavimo požiūriu nėra vertikali. Norėdami išspręsti šią problemą, naudojame naikintojas . Šiame skyriuje aptarsime alternatyvų variantą destruktorius Java . Taip pat išmoksime naudotis užbaigti () metodas kaip naikintojas.

The naikintojas yra konstruktoriaus priešingybė. Konstruktorius naudojamas objektams inicijuoti, o naikintojas – objektui, kuris išleidžia objekto užimtus išteklius, ištrinti arba sunaikinti.

Prisiminti, kad Java programoje nėra destruktoriaus sąvokos . Vietoj naikintuvo „Java“ pateikia šiukšlių rinktuvą, kuris veikia taip pat, kaip ir naikintuvas. Šiukšlių rinktuvas yra programa (gija), kuri veikia JVM . Jis automatiškai ištrina nenaudojamus objektus (nebenaudojamus objektus) ir atlaisvina atmintį. Programuotojui nereikia valdyti atminties rankiniu būdu. Tai gali būti klaidų, pažeidžiama ir gali sukelti atminties nutekėjimą.

Kas yra Java destruktorius?

Tai specialus metodas, kuris automatiškai iškviečiamas, kai objektas nebenaudojamas. Kai objektas baigia savo gyvavimo ciklą, šiukšlių surinkėjas ištrina tą objektą ir atima arba išlaisvina objekto užimtą atmintį.

Jis taip pat žinomas kaip finalininkai kurie yra nedeterministiniai. Į Java , tvarkomų objektų paskirstymas ir perskirstymas šiukšlių surinkėjas . Užbaigtųjų iškvietimas negarantuojamas, nes jis iškviečiamas netiesiogiai.

Destructor privalumai

  • Tai išlaisvina objekto užimtus išteklius.
  • Aiškaus iškvietimo nereikia, jis automatiškai iškviečiamas programos vykdymo pabaigoje.
  • Jis nepriima jokių parametrų ir negali būti perkrautas.

Kaip veikia destruktorius?

Kai objektas yra sukurtas, jis užima vietą krūvoje. Šiuos objektus naudoja gijos. Jei objektai nebenaudojami, jie tampa tinkami šiukšlių rinkimui. To objekto užimta atmintis dabar yra prieinama naujiems kuriamiems objektams. Pažymima, kad šiukšlių surinkėjui sunaikinus objektą, JRE iškviečia finalize() metodą, kad uždarytų ryšius, tokius kaip duomenų bazė ir tinklo ryšys.

Iš to, kas išdėstyta pirmiau, galime daryti išvadą, kad naikintuvo ir šiukšlių rinktuvo naudojimas yra kūrėjo įsikišimo į atminties valdymą lygis. Tai yra pagrindinis skirtumas tarp šių dviejų. Destruktorius tiksliai praneša, kada objektas bus sunaikintas. Nors Java, šiukšlių surinkėjas atlieka tą patį darbą automatiškai. Šie du atminties valdymo būdai turi teigiamą ir neigiamą poveikį. Tačiau pagrindinė problema yra ta, kad kartais kūrėjui reikia nedelsiant pasiekti atminties valdymą.

Java finalize() metodas

Programuotojui sunku priverstinai įvykdyti šiukšlių surinkėją, kad sunaikintų objektą. Tačiau „Java“ yra alternatyvus būdas tai padaryti. „Java Object“ klasė suteikia užbaigti () metodas, kuris veikia taip pat kaip ir destruktorius. Metodo finalize() sintaksė yra tokia:

Sintaksė:

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

Tai nėra naikintojas, bet suteikia papildomo saugumo. Tai užtikrina išorinių išteklių naudojimą, pvz., failo uždarymą ir pan. prieš išjungiant programą. Jį galime vadinti naudodami patį metodą arba iškviesdami metodą System.runFinalizersOnExit(true) .

  • Tai apsaugotas Object klasės metodas, apibrėžtas java.lang pakete.
  • Jis gali būti vadinamas tik vieną kartą.
  • Jei norime nepaisyti metodo, turime aiškiai iškviesti finalize() metodą.
  • Gc() yra JVM metodas, kurį vykdo šiukšlių surinkėjas. Jis iškviečiamas, kai krūvos atmintis yra pilna ir reikia daugiau atminties naujiems objektams.
  • Išskyrus nepažymėtas išimtis, JVM nepaiso visų išimčių, atsirandančių naudojant finalize() metodą.

Destructor pavyzdys

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

Išvestis:

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