logo

Java Destroyer

U Javi, kada kreiramo objekt klase, on zauzima nešto prostora u memoriji (heap). Ako te objekte ne izbrišemo, oni ostaju u memoriji i zauzimaju nepotreban prostor koji nije uspravan s aspekta programiranja. Da bismo riješili ovaj problem, koristimo se razarač . U ovom odjeljku raspravljat ćemo o alternativnoj opciji destruktor u Javi . Također, također ćemo naučiti kako koristiti finalizirati () metoda kao destruktor.

The razarač je suprotnost od konstruktora. Konstruktor se koristi za inicijalizaciju objekata, dok se destruktor koristi za brisanje ili uništavanje objekta koji oslobađa resurse koje objekt zauzima.

Zapamti to u Javi ne postoji koncept destruktora . Umjesto destruktora, Java nudi skupljač smeća koji radi isto kao i destruktor. Sakupljač smeća je program (nit) koji radi na JVM . Automatski briše neiskorištene objekte (objekte koji se više ne koriste) i oslobađa memoriju. Programer ne mora ručno upravljati memorijom. Može biti sklon pogreškama, ranjiv i može dovesti do curenja memorije.

Što je destruktor u Javi?

To je posebna metoda koja se automatski poziva kada se objekt više ne koristi. Kada objekt završi svoj životni ciklus, sakupljač smeća briše taj objekt i oslobađa ili oslobađa memoriju koju zauzima objekt.

Također je poznat kao finalizatori koji su nedeterministički. U Java , dodjeljivanje i oslobađanje objekata kojima rukuje sakupljač smeća . Pozivanje finalizatora nije zajamčeno jer se poziva implicitno.

Prednosti Destructora

  • Oslobađa resurse koje zauzima objekt.
  • Nije potreban eksplicitni poziv, automatski se poziva na kraju izvođenja programa.
  • Ne prihvaća nijedan parametar i ne može se preopteretiti.

Kako radi destruktor?

Kada je objekt kreiran, on zauzima prostor u hrpi. Ove objekte koriste niti. Ako nit više ne koristi objekte, postaje prihvatljiv za skupljanje smeća. Memorija koju zauzima taj objekt sada je dostupna za nove objekte koji se stvaraju. Primijećeno je da kada sakupljač smeća uništi objekt, JRE poziva metodu finalize() za zatvaranje veza kao što su baza podataka i mrežna veza.

Iz navedenog možemo zaključiti da je korištenje destruktora i skupljača smeća razina uplitanja programera u upravljanje memorijom. To je glavna razlika između njih dvoje. Destruktor točno obavještava kada će objekt biti uništen. Dok u Javi skupljač smeća radi isti posao automatski. Ova dva pristupa upravljanju pamćenjem imaju pozitivne i negativne učinke. Ali glavni problem je da ponekad programer treba trenutni pristup upravljanju memorijom.

Java finalize() metoda

Programeru je teško nasilno izvršiti skupljač smeća kako bi uništio objekt. Ali Java nudi alternativni način da učinite isto. Klasa Java Object pruža finalizirati () metoda koja radi isto kao i destruktor. Sintaksa metode finalize() je sljedeća:

Sintaksa:

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

Nije destruktor, ali pruža dodatnu sigurnost. Osigurava korištenje vanjskih resursa kao što je zatvaranje datoteke itd. prije gašenja programa. Možemo ga pozvati korištenjem same metode ili pozivanjem metode System.runFinalizersOnExit(true) .

  • To je zaštićena metoda klase Object koja je definirana u paketu java.lang.
  • Može se pozvati samo jednom.
  • Moramo izričito pozvati metodu finalize() ako želimo nadjačati metodu.
  • Gc() je metoda JVM-a koju izvršava skupljač smeća. Poziva se kada je heap memorija puna i zahtijeva više memorije za nove pristigle objekte.
  • Osim neprovjerenih iznimaka, JVM zanemaruje sve iznimke koje se javljaju metodom finalize().

Primjer destruktora

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

Izlaz:

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