Vad är Java Garbage Collector? - Guide till Java Garbage Collector

Innehållsförteckning:

Anonim

Vad är Java Garbage Collector?

Soporna är en daemontråd som frigör minne under körning. Soporavfall kan också uttryckas som minnesåtervinning. Vanligtvis i JVM används oracle hotspot-avfallssamlare på grund av dess effektivitet. Minnesområdet i JVM där objekt skapas kallas heap. Heap är uppdelat i två delar:

  1. Ung generation utrymme
  2. Gammal / hyrd generationsutrymme

Den unga generationen är återigen uppdelad i 3 delar

  1. Eden utrymme
  2. Survivor From
  3. Överlevande till

En mer djup förklaring har ges i nästa punkter. Om du till exempel skapade en cache i ditt program och om cacheobjektet överlevde många cykler av GC, går det in i den gamla generationen. GC letar efter objekt som inte längre behövs av programmet och förstör dem.

Varför sopor?

Innan Java var två av de mest populära språken C och C ++. I C har vi stött på calloc (), malloc (), realloc () som kommer att fördela buffertminne och i C ++ har vi destruktorer. Alla dessa funktioner är för den funktion som kallas minneshantering. Java tillhandahåller Garbage Collector som automatisk minneshantering av de två huvudsakliga skälen:

  • Vissa skapade objekt blir oåtkomliga
  • Hänvisningar från gamla föremål till unga föremål finns bara i litet antal.

Det bästa sättet att använda en sopor är att sätta flaggor på JVM.

Låt mig ge dig ett exempel på obearbetbara objekt

//class code
int i = 1;
if(i == 1)(
String s = abc;
System.out.println(s);
)
//class code

I exemplet ovan kommer Java att skapa ett strängobjekt och omfånget för det objektet är bara i det om blocket inte kan användas utanför. Således, när skräppsamlingen går över denna klass kommer det att markera 's' som oåtkomligt och oanvänt objekt och kommer att ta bort det.

Funktioner i Garbage Collector

  • Mark: Startar från rotnoden för din applikation (huvud), går objektgrafen, markerar objekt som kan nås som livet.
  • Radera / svepa: radera obearbetbara objekt. När GC raderar objekt skapar det ett hål i högen vilket gör det inkonsekvent. Således används komprimering.
  • Kompaktering: Komprimera minnet genom att flytta runt föremålen och markera tilldelningen sammanhängande än fragmenterad. Det är en tidskrävande uppgift.

Hur fungerar Java Garbage Collector?

  • Det finns två typer av objekt:

Live Objects: Reachable (referenser från ett annat objekt)

Dead Objects: Unreachable (inte refererat någonstans)

  • Alla de nyskapade objekten skapas i Eden-rymden (Young Generation space).
  • När Eden-rymden är full körs ett minorGC () -program på Young Generation-utrymmet som markerar alla oanvända eller döda föremål och sveper dem från minnet.
  • Objekten som överlevde denna GC-cykel flyttas till Survivor From Space. Samma process upprepas och den här gången när objekt flyttas från Eden-rymden till Survivor Från rymden, GC kontrollerar om det är fullt, de döda föremålen släpps och överlevda objekt flyttas också till Survivor.
  • Denna process upprepas och är vissa objekt överlevde en tröskel nr GC cykler, dessa objekt flyttas till Old Generation utrymme.
  • I det här scenariot kör JVM majorGC () -funktionen som går igenom fullständigt högutrymme, identifierar / markerar oanvända (noll eller döda) objekt och sveper alla dessa objekt.
  • Kom ihåg att genom att svepa föremål från högutrymmet skapas hål i minnet vilket orsakar en minnesläcka. För att undvika ett sådant scenario implementerar soporuppsamlare komprimering av minnesutrymme

Exempel på Garbage Collector i Java

Exempel på system.gc ():

class Demo (
public void finalize()(
System.out.println(“Object”);
)
public static void main(String args())(
Demo obj1 = new Demo();
Demo obj2 = new Demo();
obj1 = null;
obj2 = null;
System.gc();
)
)

Produktion:

Objekt

Förklaring av koden ovan

  • I ovanstående kod pekar de två objekten obj1 och obj2 till noll så att de lagras i Eden-rymden med noll och oreferenser
  • System gc () kommer att påkalla en daemontråd i skräpsamlingen och båda föremålen raderas från utrymmet.

Fördelar och nackdelar

Nedan följer några för- och nackdelar med Java Garbage Collector enligt följande:

Fördelar med gc:

  • Soporuppsamling ökar minneseffektiviteten eftersom det kommer att ta bort alla oanvända och nullobjekt
  • En soporuppsamlare är en automatisk process, så utvecklaren kanske inte tar hand om det, eftersom på andra språk utan en soporavfallsprogrammerare måste ta hand om svårt minnesproblem.

Nackdelar med gc:

  • Skräpkollektorn kommer att köra huvudsaklig gc-funktion som går igenom hela högutrymmet, vilket gör att ditt program går långsamt med några sekunder.
  • Den här processen tar mer CPU-tid och gör kodsystemet långsammare.
  • Om du arbetar med en applikation som kräver enormt minne använder du JVM-flaggor tillgängliga.
  • Om heap-utrymmet är fullt och objekt inte kan svepas eller läggas till ytterligare, kastar Java ut minnesfelet vilket kommer att bromsa hela applikationen och också kan orsaka minnesläckor.

Rekommenderade artiklar

Det här är en guide till Vad är Java Garbage Collector ?. Här diskuterar vi dess arbete med funktioner, exempel, fördelar och nackdelar med Java-sopor. Du kan också titta på följande artiklar för att lära dig mer–

  1. Konstruktör och Destructor i Java
  2. Destructor i Java
  3. C # vs Java-prestanda
  4. Vad är JVM?