logo

Java Destroyer

I Java, när vi skapar ett objekt av klassen, upptar det lite utrymme i minnet (högen). Om vi ​​inte tar bort dessa objekt, finns det kvar i minnet och tar upp onödigt utrymme som inte är upprätt ur programmeringsaspekten. För att lösa detta problem använder vi jagare . I det här avsnittet kommer vi att diskutera det alternativa alternativet till förstörare i Java . Vi kommer också att lära oss hur man använder avsluta() metod som en förstörare.

De jagare är motsatsen till konstruktören. Konstruktorn används för att initiera objekt medan destruktorn används för att ta bort eller förstöra objektet som frigör resursen som upptas av objektet.

Kom ihåg det det finns inget koncept för destruktor i Java . I stället för förstöraren tillhandahåller Java sopsamlaren som fungerar på samma sätt som förstöraren. Sophämtaren är ett program (tråd) som körs på JVM . Den raderar automatiskt oanvända objekt (objekt som inte längre används) och frigör minne. Programmeraren behöver inte hantera minnet, manuellt. Det kan vara felbenäget, sårbart och kan leda till en minnesläcka.

Vad är destruktorn i Java?

Det är en speciell metod som automatiskt anropas när ett objekt inte längre används. När ett objekt slutför sin livscykel raderar sopsamlaren det objektet och avallokerar eller släpper minnet som upptas av objektet.

Det är också känt som finalister som är icke-deterministiska. I Java , tilldelning och omfördelning av objekt som hanteras av skräp samlare . Anropet av slutbehandlare är inte garanterat eftersom det anropar implicit.

Fördelar med Destructor

  • Det frigör resurserna som upptas av objektet.
  • Inget uttryckligt anrop krävs, det anropas automatiskt i slutet av programmets körning.
  • Den accepterar inte någon parameter och kan inte överbelastas.

Hur fungerar destructor?

När objektet skapas upptar det utrymmet i högen. Dessa objekt används av trådarna. Om föremålen inte längre används av tråden blir de berättigade till sophämtning. Minnet som upptas av det objektet är nu tillgängligt för nya objekt som skapas. Det noteras att när sopsamlaren förstör objektet anropar JRE metoden finalize() för att stänga anslutningarna som databas och nätverksanslutning.

Av ovanstående kan vi dra slutsatsen att användningen av förstöraren och skräpsamlaren är nivån på utvecklarens störning av minneshantering. Det är den största skillnaden mellan de två. Destruktören meddelar exakt när föremålet kommer att förstöras. Medan i Java gör sopsamlaren samma arbete automatiskt. Dessa två metoder för minneshantering har positiva och negativa effekter. Men huvudproblemet är att ibland behöver utvecklaren omedelbar tillgång till minneshantering.

Java finalize() metod

Det är svårt för programmeraren att med våld köra sopsamlaren för att förstöra föremålet. Men Java erbjuder ett alternativt sätt att göra detsamma. Java Object-klassen tillhandahåller avsluta() metod som fungerar på samma sätt som förstöraren. Syntaxen för finalize()-metoden är följande:

Syntax:

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

Det är inte en förstörare men det ger extra säkerhet. Det säkerställer användningen av externa resurser som att stänga filen, etc. innan du stänger av programmet. Vi kan kalla det genom att använda själva metoden eller åberopa metoden System.runFinalizersOnExit(true) .

  • Det är en skyddad metod av klassen Object som är definierad i paketet java.lang.
  • Det kan bara kallas en gång.
  • Vi måste anropa finalize()-metoden uttryckligen om vi vill åsidosätta metoden.
  • gc() är en metod för JVM som exekveras av Garbage Collector. Den anropar när högminnet är fullt och kräver mer minne för nya ankommande objekt.
  • Förutom de omarkerade undantagen ignorerar JVM alla undantag som inträffar med finalize()-metoden.

Exempel på Destructor

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

Produktion:

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