logo

Java Destroyer

V Javě, když vytvoříme objekt třídy, zabírá určité místo v paměti (hromadu). Pokud tyto objekty nesmažeme, zůstávají v paměti a zabírají zbytečný prostor, který není z hlediska programování vzpřímený. K vyřešení tohoto problému používáme ničitel . V této části probereme alternativní možnost k destruktor v Javě . Také se naučíme, jak používat dokončit() metoda jako destruktor.

The ničitel je opakem konstruktoru. Konstruktor se používá k inicializaci objektů, zatímco destruktor se používá k odstranění nebo zničení objektu, který uvolňuje prostředek obsazený objektem.

Pamatuj si to v Javě neexistuje žádný koncept destruktoru . Místo destruktoru poskytuje Java garbage collector, který funguje stejně jako destruktor. Garbage collector je program (vlákno), který běží na JVM . Automaticky odstraní nepoužívané objekty (objekty, které se již nepoužívají) a uvolní paměť. Programátor nemusí spravovat paměť ručně. Může být náchylný k chybám, zranitelný a může vést k úniku paměti.

Co je destruktor v Javě?

Je to speciální metoda, která se automaticky volá, když se objekt již nepoužívá. Když objekt dokončí svůj životní cyklus, garbage collector tento objekt odstraní a uvolní nebo uvolní paměť obsazenou objektem.

Je také známý jako finalizátory které jsou nedeterministické. v Jáva , alokaci a dealokaci objektů, se kterými se zachází Popelář . Vyvolání finalizátorů není zaručeno, protože se vyvolává implicitně.

Výhody destruktoru

  • Uvolňuje zdroje obsazené objektem.
  • Není vyžadováno žádné explicitní volání, je automaticky vyvoláno na konci provádění programu.
  • Neakceptuje žádný parametr a nemůže být přetížen.

Jak funguje destruktor?

Když je objekt vytvořen, zabírá prostor v haldě. Tyto objekty jsou používány vlákny. Pokud již vlákno nepoužívá objekty, stane se způsobilým pro garbage collection. Paměť obsazená tímto objektem je nyní k dispozici pro nové objekty, které se vytvářejí. Je třeba poznamenat, že když garbage collector zničí objekt, JRE zavolá metodu finalize() k uzavření připojení, jako je databáze a síťové připojení.

Z výše uvedeného můžeme usoudit, že použití destruktoru a garbage collectoru je mírou zásahu vývojáře do správy paměti. To je hlavní rozdíl mezi těmito dvěma. Destruktor přesně oznámí, kdy bude objekt zničen. Zatímco v Javě provádí garbage collector stejnou práci automaticky. Tyto dva přístupy ke správě paměti mají pozitivní i negativní účinky. Ale hlavním problémem je, že někdy vývojář potřebuje okamžitý přístup ke správě paměti.

Metoda Java finalize().

Pro programátora je obtížné násilně spustit garbage collector, aby zničil objekt. Ale Java poskytuje alternativní způsob, jak udělat totéž. Třída Java Object poskytuje dokončit() metoda, která funguje stejně jako destruktor. Syntaxe metody finalize() je následující:

Syntax:

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

Není to destruktor, ale poskytuje extra zabezpečení. Zajišťuje použití externích zdrojů, jako je zavření souboru atd. před vypnutím programu. Můžeme ji volat pomocí samotné metody nebo vyvoláním metody System.runFinalizersOnExit(true) .

  • Jde o chráněnou metodu třídy Object, která je definována v balíčku java.lang.
  • Lze jej volat pouze jednou.
  • Pokud chceme metodu přepsat, musíme explicitně zavolat metodu finalize().
  • Gc() je metoda JVM prováděná nástrojem Garbage Collector. Vyvolá se, když je paměť haldy plná a vyžaduje více paměti pro nové přicházející objekty.
  • Kromě nekontrolovaných výjimek JVM ignoruje všechny výjimky, které se vyskytnou metodou finalize().

Příklad destruktoru

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ýstup:

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