V Javi, ko ustvarimo objekt razreda, ta zasede nekaj prostora v pomnilniku (kup). Če teh objektov ne izbrišemo, ostanejo v pomnilniku in zasedajo nepotreben prostor, ki z vidika programiranja ni pokončen. Za rešitev te težave uporabljamo rušilec . V tem razdelku bomo razpravljali o alternativni možnosti za destructor v Javi . Prav tako se bomo naučili uporabljati dokončaj() metoda kot destruktor.
The rušilec je nasprotje konstruktorja. Konstruktor se uporablja za inicializacijo objektov, medtem ko se destruktor uporablja za brisanje ali uničenje predmeta, ki sprosti vir, ki ga zaseda objekt.
Zapomni si to v Javi ni koncepta destruktorja . Namesto destruktorja nudi Java zbiralnik smeti, ki deluje enako kot destruktor. Zbiralnik smeti je program (nit), ki teče na JVM . Samodejno izbriše neuporabljene objekte (predmete, ki se ne uporabljajo več) in sprosti pomnilnik. Programerju ni treba ročno upravljati pomnilnika. Lahko je nagnjen k napakam, ranljiv in lahko povzroči uhajanje pomnilnika.
Kaj je destruktor v Javi?
To je posebna metoda, ki se samodejno pokliče, ko se objekt ne uporablja več. Ko objekt zaključi svoj življenjski cikel, zbiralnik smeti ta objekt izbriše in sprosti ali sprosti pomnilnik, ki ga zaseda objekt.
Znan je tudi kot finalizatorji ki so nedeterministični. notri Java , dodeljevanje in sprostitev objektov, ki jih obravnava zbiralec smeti . Priklic finalizatorjev ni zagotovljen, ker se prikliče implicitno.
Prednosti Destructorja
- Sprosti vire, ki jih zaseda predmet.
- Izrecni klic ni potreben, samodejno se prikliče ob koncu izvajanja programa.
- Ne sprejema nobenega parametra in ga ni mogoče preobremeniti.
Kako deluje destruktor?
Ko je predmet ustvarjen, zasede prostor v kupu. Te predmete uporabljajo niti. Če nit ne uporablja več objektov, postane primeren za zbiranje smeti. Pomnilnik, ki ga zaseda ta objekt, je zdaj na voljo za nove objekte, ki se ustvarjajo. Opozoriti je treba, da ko zbiralnik smeti uniči objekt, JRE pokliče metodo finalize(), da zapre povezave, kot sta baza podatkov in omrežna povezava.
Iz zgoraj navedenega lahko sklepamo, da je uporaba destructorja in zbiralnika smeti raven vmešavanja razvijalca v upravljanje pomnilnika. To je glavna razlika med obema. Destructor natančno obvesti, kdaj bo predmet uničen. Medtem ko v Javi zbiralnik smeti samodejno opravi isto delo. Ta dva pristopa k upravljanju spomina imata pozitivne in negativne učinke. Toda glavna težava je, da včasih razvijalec potrebuje takojšen dostop do upravljanja pomnilnika.
Metoda Java finalize().
Programerju je težko na silo izvesti zbiralnik smeti, da uniči predmet. Toda Java ponuja alternativni način za isto. Razred Java Object zagotavlja dokončaj() metoda, ki deluje enako kot destruktor. Sintaksa metode finalize() je naslednja:
Sintaksa:
protected void finalize throws Throwable() { //resources to be close }
Ni destruktor, vendar zagotavlja dodatno varnost. Zagotavlja uporabo zunanjih virov, kot je zapiranje datoteke itd., preden zaustavite program. Lahko ga pokličemo z uporabo same metode ali priklicem metode System.runFinalizersOnExit(true) .
- Je zaščitena metoda razreda Object, ki je definirana v paketu java.lang.
- Kliče se lahko samo enkrat.
- Če želimo metodo preglasiti, moramo izrecno poklicati metodo finalize().
- Gc() je metoda JVM, ki jo izvaja Garbage Collector. Prikliče se, ko je pomnilnik kopice poln in potrebuje več pomnilnika za nove prispele objekte.
- Razen nepreverjenih izjem JVM prezre vse izjeme, do katerih pride z metodo finalize().
Primer Destructorja
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'); } }
Izhod:
Object is destroyed by the Garbage Collector Inside the main() method Object is destroyed by the Garbage Collector