Hva er Java Garbage Collector? - Guide til Java Garbage Collector

Innholdsfortegnelse:

Anonim

Hva er Java Garbage Collector?

Søppeloppsamleren er en demontråd som frigjør minne under kjøretid. Søppelinnsamling kan også uttrykkes som minnegjenvinning. I JVM brukes ofte oracle hotspot søppeloppsamler på grunn av dens effektivitet. Hukommelsesområdet i JVM der objekter opprettes, kalles heap. Heap er delt inn i to deler:

  1. Ung generasjons plass
  2. Gammel / leid generasjonsplass

Den unge generasjonen er igjen delt inn i 3 deler

  1. Eden plass
  2. Overlevende fra
  3. Overlevende til

En mer dyp forklaring er gitt i de neste punktene. Hvis du for eksempel opprettet en hurtigbuffer i programmet ditt, og hvis cacheobjektet overlevde mange sykluser med GC, går det inn i den gamle generasjonen. GC ser etter objekter som ikke lenger er nødvendig av programmet og ødelegger dem.

Hvorfor søppeloppsamler?

Før Java var to av de mest populære språkene C og C ++. I C har vi kommet over calloc (), malloc (), realloc () som vil tildele bufferminne og i C ++ har vi destruktorer. Alle disse funksjonene er for funksjonen som kalles minnehåndtering. Java gir søppeloppsamler som automatisk minnestyring av de to viktigste grunnene:

  • Noen objekter som er opprettet blir utilgjengelige
  • Henvisninger fra gamle objekter til unge gjenstander finnes bare i små tall.

Den beste fremgangsmåten for å bruke en søppelsamler er å sette flagg på JVM.

La meg gi deg et eksempel på uoppnåelige objekter

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

I eksemplet ovenfor vil Java opprette et strengobjekt, og omfanget av det objektet er bare i det at hvis blokken ikke kan brukes utenfor. Når søppelsamlingen går over denne klassen, vil den således merke 's' som utilgjengelig og ubrukt objekt og slette den.

Funksjoner i Garbage Collector

  • Merk: Starter fra rotknuten til applikasjonen din (hoved), går objektsdiagrammet, markerer objekter som kan nås som livet.
  • Slette / feie: Slett utilgjengelige objekter. Når GC sletter gjenstander, skaper det et hull i bunken som gjør det inkonsekvent. Dermed brukes komprimering.
  • Komprimering: Komprimerer minnet ved å bevege deg rundt objektene og merke tildelingen sammenhengende enn fragmentert. Det er en tidkrevende oppgave.

Hvordan fungerer Java Garbage Collector?

  • Det er to typer objekt:

Live Objects: Reachable (referanser fra et annet objekt)

Døde objekter: ikke tilgjengelig (ikke henvist til hvor som helst)

  • Alle de nyopprettede objektene er opprettet i Eden-rommet (Young Generation space).
  • Når Eden-plassen er full, kjører et minorGC () -program på Young Generation-rom som markerer alle ubrukte eller døde gjenstander og feier dem fra minnet.
  • Gjenstandene som overlevde denne GC-syklusen vil bli flyttet til Survivor From space. Den samme prosessen gjentas, og denne gangen når objekter flyttes fra Eden-rommet til Survivor Fra verdensrommet, kontrollerer GC om de er fulle, de døde objektene blir løslatt og gjenlevede objekter vil også bli flyttet til Survivor.
  • Denne prosessen gjentas og er noen objekter som overlevde en terskel ingen GC-sykluser, disse objektene blir flyttet til Old Generation-rommet.
  • I dette scenariet kjører JVM majorGC () -funksjon som kjører gjennom fullstendig heap-plass, identifiserer / merker ubrukte (null eller døde) objekter og feier alle disse objektene.
  • Husk at feiing av gjenstander fra haugrommet vil skape hull i minnet og forårsake en minnelekkasje. For å unngå et slikt scenario implementerer søppeloppsamleren komprimering av minneplassen

Eksempler på Garbage Collector i Java

Eksempel 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();
)
)

Produksjon:

Gjenstand

Forklaring av koden ovenfor

  • I koden ovenfor peker de to objektene obj1 og obj2 til null, slik at de lagres i Eden-rommet med null og ikke-refererte verdier
  • System gc () vil påkalle en daemontråd med søppelsamlingen, og begge objektene blir slettet fra plassen.

Prons og ulemper

Nedenfor er noen fordeler og ulemper med Java Garbage Collector som følger:

Fordeler med gc:

  • Søppelinnsamling øker hukommelseseffektiviteten da den vil slette alle ubrukte og null objekter
  • En søppleoppsamler er en automatisk prosess, så utvikleren kan ikke ta seg av det, fordi på andre språk uten en søppelinnsamler-programmerer må ta seg av unnvikende hukommelsesproblemer.

Ulemper ved gc:

  • Søppeloppsamleren vil ha større gc-funksjon som vil kjøre gjennom hele haugeplassen, noe som gjør programmet raskt sakte med noen sekunder.
  • Denne prosessen vil ta mer CPU-tid og gjøre kodesystemet tregere.
  • Hvis du jobber med et program som krever enormt minne, kan du bruke JVM-flaggene tilgjengelig.
  • Hvis mye plass er fullt, og objekter ikke kan sveipes eller legges til ytterligere, kaster Java ut av Memory Error, noe som vil bremse hele applikasjonen, og det kan også forårsake minnelekkasjer.

Anbefalte artikler

Dette er en guide til Hva er Java Garbage Collector ?. Her diskuterer vi dets arbeid med funksjoner, eksempel, fordeler og ulemper med Java-søppeloppsamler. Du kan også se på følgende artikler for å lære mer–

  1. Konstruktør og Destructor i Java
  2. Destructor i Java
  3. C # vs Java-ytelse
  4. Hva er JVM?