logo

Java Destroyer

V Jave, keď vytvoríme objekt triedy, zaberá určité miesto v pamäti (hromadu). Ak tieto objekty nevymažeme, zostane v pamäti a zaberá zbytočné miesto, ktoré nie je z hľadiska programovania vzpriamené. Na vyriešenie tohto problému používame ničiteľ . V tejto časti budeme diskutovať o alternatívnej možnosti k deštruktor v Jave . Tiež sa naučíme, ako používať finalizovať () metóda ako deštruktor.

The ničiteľ je opakom konštruktora. Konštruktor sa používa na inicializáciu objektov, zatiaľ čo deštruktor sa používa na odstránenie alebo zničenie objektu, ktorý uvoľňuje zdroj obsadený objektom.

Zapamätaj si to v Jave neexistuje koncept deštruktora . Namiesto deštruktora poskytuje Java zberač odpadu, ktorý funguje rovnako ako deštruktor. Garbage collector je program (vlákno), ktorý beží na JVM . Automaticky vymaže nepoužité objekty (objekty, ktoré sa už nepoužívajú) a uvoľní pamäť. Programátor nemusí spravovať pamäť manuálne. Môže byť náchylný na chyby, zraniteľný a môže viesť k úniku pamäte.

Čo je deštruktor v Jave?

Je to špeciálna metóda, ktorá sa automaticky volá, keď sa objekt už nepoužíva. Keď objekt dokončí svoj životný cyklus, zberač odpadu tento objekt vymaže a uvoľní alebo uvoľní pamäť obsadenú objektom.

Je tiež známy ako finalizátorov ktoré sú nedeterministické. In Java , prideľovanie a rozdeľovanie objektov, s ktorými sa manipuluje smetiar . Vyvolanie finalizátorov nie je zaručené, pretože sa vyvoláva implicitne.

Výhody Destructor

  • Uvoľňuje zdroje obsadené objektom.
  • Nie je potrebné žiadne explicitné volanie, je automaticky vyvolané na konci vykonávania programu.
  • Neakceptuje žiadny parameter a nemôže byť preťažený.

Ako funguje deštruktor?

Keď je objekt vytvorený, zaberá priestor v halde. Tieto objekty používajú vlákna. Ak sa objekty už nepoužíva vlákno, stane sa vhodný pre garbage collection. Pamäť obsadená týmto objektom je teraz k dispozícii pre nové objekty, ktoré sa vytvárajú. Je potrebné poznamenať, že keď zberač odpadu zničí objekt, JRE zavolá metódu finalize() na zatvorenie spojení, ako je napríklad pripojenie k databáze a sieťové pripojenie.

Z vyššie uvedeného môžeme usúdiť, že používanie deštruktora a zberača odpadu je mierou zásahu vývojára do správy pamäte. To je hlavný rozdiel medzi nimi. Deštruktor presne oznámi, kedy bude objekt zničený. Zatiaľ čo v Jave vykonáva zberač odpadu rovnakú prácu automaticky. Tieto dva prístupy k správe pamäte majú pozitívne a negatívne účinky. Ale hlavným problémom je, že niekedy vývojár potrebuje okamžitý prístup k správe pamäte.

Metóda Java finalize().

Pre programátora je ťažké násilne spustiť zberač odpadu, aby zničil objekt. Java však poskytuje alternatívny spôsob, ako urobiť to isté. Trieda Java Object poskytuje finalizovať () metóda, ktorá funguje rovnako ako deštruktor. Syntax metódy finalize() je nasledovná:

Syntax:

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

Nie je to deštruktor, ale poskytuje extra bezpečnosť. Zabezpečuje použitie externých zdrojov, ako je zatvorenie súboru atď. pred vypnutím programu. Môžeme to zavolať pomocou samotnej metódy alebo vyvolaním metódy System.runFinalizersOnExit(true) .

  • Ide o chránenú metódu triedy Object, ktorá je definovaná v balíku java.lang.
  • Môže sa volať iba raz.
  • Ak chceme metódu prepísať, musíme explicitne zavolať metódu finalize().
  • Gc() je metóda JVM, ktorú vykonáva Garbage Collector. Vyvolá sa, keď je pamäť haldy plná a vyžaduje viac pamäte pre nové prichádzajúce objekty.
  • Okrem nekontrolovaných výnimiek JVM ignoruje všetky výnimky, ktoré sa vyskytujú pri metóde finalize().

Príklad deštruktora

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

Výkon:

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