Hvad er Java Garbage Collector? - Vejledning til Java Garbage Collector

Indholdsfortegnelse:

Anonim

Hvad er Java Garbage Collector?

Affaldsopsamleren er en dæmontråd, der frigør hukommelse under kørsel. Affaldsopsamling kan også udtrykkes som hukommelse genanvendelse. Oftes i JVM bruges oracle hotspot-affaldsopsamler på grund af dens effektivitet. Hukommelsesområdet i JVM, hvor objekter oprettes, kaldes heap. Heap er opdelt i to dele:

  1. Ung generation af plads
  2. Gammel / fast ejendom generation plads

Den unge generation er igen opdelt i 3 dele

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

En mere dyb forklaring er givet i de næste punkter. For eksempel, hvis du oprettede en cache i dit program, og hvis cacheobjektet overlevede mange cykler af GC, går det ind i den gamle generation. GC kigger efter objekter, som programmet ikke længere har brug for og ødelægger dem.

Hvorfor affaldsopsamler?

Før Java var to af de mest populære sprog C og C ++. I C er vi stødt på calloc (), malloc (), realloc (), der vil allokere bufferhukommelse, og i C ++ har vi destruktorer. Alle disse funktioner er til den funktion, der kaldes hukommelsesstyring. Java leverer affaldsopsamler som automatisk hukommelsesstyring af de to vigtigste grunde:

  • Nogle oprettede objekter bliver utilgængelige
  • Henvisninger fra gamle objekter til unge objekter findes kun i små tal.

Den bedste praksis for at bruge en skraldesamler er at sætte flag på JVM.

Lad mig give dig et eksempel på objekter, der ikke kan nås

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

I ovenstående eksempel vil Java oprette et strengobjekt, og omfanget af dette objekt er bare i det, hvis blokken ikke kan bruges udenfor. Når affaldsopsamling løber over denne klasse, markerer det 's' som et ikke tilgængeligt og ubrugt objekt og sletter det.

Funktioner i Garbage Collector

  • Mark: Start fra rodnoden til din applikation (hoved), går objektgrafen, markerer objekter, der kan nås som livet.
  • Slet / feje: Slet objekter, der ikke kan nås. Når GC sletter objekter, skaber det et hul i bunken, hvilket gør dem inkonsekvente. Således anvendes komprimering.
  • Komprimering: Komprimerer hukommelsen ved at bevæge dig rundt i objekterne og markere tildelingen sammenhængende end fragmenteret. Det er en tidskrævende opgave.

Hvordan fungerer Java Garbage Collector?

  • Der er to typer objekt:

Live Objects: Reachable (referencer fra et andet objekt)

Døde objekter: ikke nås (ikke henvist til overalt)

  • Alle de nyligt oprettede objekter oprettes i Eden-rummet (Young Generation-rummet).
  • Når Eden-pladsen er fuld, kører et mindreGC () -program på Young Generation-rum, der markerer alle ubrugte eller døde objekter og fejer dem fra hukommelsen.
  • Objekterne, der overlevede denne GC-cyklus, flyttes til Survivor From space. Den samme proces gentages, og denne gang, når objekter flyttes fra Eden-rummet til Survivor Fra rummet, kontrollerer GC, om de er fulde, de døde objekter frigives og overlevede objekter flyttes også til Survivor.
  • Denne proces gentages og er nogle objekter, der har overlevet en tærskelværdi for GC-cyklusser, disse objekter flyttes til Old Generation-rummet.
  • I dette scenarie kører JVM majorGC () -funktion, der løber gennem komplet bunkeplads, identificerer / markerer ubrugte (nul eller død) objekter og fejer alle disse objekter.
  • Husk, at feje af genstande fra bunkepladsen skaber huller i hukommelsen, hvilket forårsager en hukommelseslækage. For at undgå et sådant scenario implementerer affaldsopsamler komprimering af hukommelsesplads

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

Produktion:

Objekt

Forklaring af ovenstående kode

  • I ovenstående kode peger de to objekter obj1 og obj2 på null, så de gemmes i Eden-rummet med nul og ikke-refererede værdier
  • System gc () påkalder en dæmontråd i skraldesamling, og begge objekter slettes fra rummet.

Prons og ulemper

Nedenfor er nogle fordele og ulemper ved Java Garbage Collector som følger:

Fordele ved gc:

  • Affaldsopsamling øger hukommelseseffektiviteten, da det vil slette alle ubrugte og null-objekter
  • En affaldsopsamler er en automatisk proces, så udvikleren må ikke tage sig af den, fordi på andre sprog uden en affaldsopsamler-programmerer er nødt til at tage sig af et unnvikende hukommelsesproblem.

Ulemper ved gc:

  • Affaldsopsamleren kører større gc-funktion, der kører gennem hele bunkerummet, hvilket gør dit program hastigt med nogle sekunder.
  • Denne proces vil tage mere CPU-tid, hvilket gør kodesystemet langsommere.
  • Hvis du arbejder på et program, der kræver enorm hukommelse, skal du bruge JVM-flag til rådighed.
  • Hvis heap plads er fuld, og objekter ikke kan skubbes eller tilføjes yderligere, kaster Java ud af hukommelsesfejl, hvilket vil bremse hele applikationen og også kan forårsage hukommelseslækager.

Anbefalede artikler

Dette er en guide til Hvad er Java Garbage Collector ?. Her diskuterer vi dets arbejde sammen med funktioner, eksempel, fordele og ulemper ved Java-affaldsopsamler. Du kan også se på de følgende artikler for at lære mere–

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