Što je Java Garbage Collector? - Vodič za Java Garbage Collector

Sadržaj:

Anonim

Što je Java Garbage Collector?

Skupljač smeća je demonska nit koja oslobađa memoriju tijekom izvođenja. Skupljanje smeća može se izraziti i reciklažom pamćenja. Uglavnom se u JVM-u koristi oracle hotspot sakupljač smeća zbog svoje učinkovitosti. Područje memorije u JVM-u u kojem se stvaraju objekti naziva se heap. Hrpa je podijeljena na dva dijela:

  1. Prostor mlade generacije
  2. Stari / zatečeni generacijski prostor

Mlada generacija je opet podijeljena u 3 dijela

  1. Edenski prostor
  2. Survivor From
  3. Survivor To

U sljedećim točkama dano je dublje objašnjenje. Na primjer, ako ste stvorili predmemoriju u svom programu i ako je predmemorijski objekt preživio mnogo ciklusa GC-a, tada to prelazi u staru generaciju. GC traži predmete koji više nisu potrebni programu i uništava ih.

Zašto sakupljač smeća?

Prije Jave, dva su najpopularnija jezika bila C i C ++. U C smo naišli na calloc (), malloc (), realloc () koji će dodijeliti memoriju pufera, a u C ++ imamo destruktore. Sve ove funkcije su za značajku koja se zove upravljanje memorijom. Java nudi Garbage Collector kao automatsko upravljanje memorijom iz glavna dva razloga:

  • Neki stvoreni predmeti postaju nedostupni
  • Upućivanja starih objekata na mlade predmete postoje samo u malom broju.

Najbolja praksa za korištenje sakupljača smeća je postavljanje zastava na JVM.

Dopustite mi da vam dam primjer za nedostupne predmete

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

U gornjem primjeru, Java će stvoriti string objekt i opseg tog objekta je upravo u tome ako se blok ne može koristiti izvan. Stoga, kada sakupljanje smeća pređe preko te klase, označit će 's' nedostupnim i neiskorištenim objektom i izbrisati ga.

Funkcije u sakupljaču smeća

  • Oznaka: Počinje od korijenskog čvora vaše aplikacije (glavne), hoda grafikonima objekata, označava predmete koji su dostižni kao život.
  • Delete / Sweep: Brisanje nedostupnih objekata. Kad GC obriše predmete, stvara rupu u hrpi, čineći je nedosljednom. Tako se koristi sabijanje.
  • Zbijanje: Kompaktirajte memoriju pomicanjem objekata i obilježavanjem raspodjele neprekidno od fragmentirane. To je dugotrajan zadatak.

Kako radi Java Garbage Collector?

  • Postoje dvije vrste objekata:

Live Objects: Dostupno (reference iz drugog objekta)

Mrtvi objekti: Nedostupan (ne odnosi se nigdje)

  • Svi novostvoreni predmeti stvoreni su u prostoru Edina (prostor mlade generacije).
  • Nakon što se prostor Eden napuni, program minorGC () pokreće se u prostoru mlade generacije koji označava sve neiskorištene ili mrtve predmete i briše ih iz memorije.
  • Predmeti koji su preživjeli ovaj GC ciklus bit će premješteni u Survivor From Space. Isti se postupak ponavlja i ovog puta, kada se predmeti premještaju iz prostora Edena u Survivor. Iz svemira, GC provjerava je li pun, mrtvi se objekti oslobađaju, a preživjeli su predmeti također premješteni u Survivor.
  • Taj se postupak ponavlja i ako su neki predmeti preživjeli prag ne od GC ciklusa, ti su se objekti premjestili u prostor Stare generacije.
  • U ovom scenariju, JVM pokreće funkciju majorGC () koja prolazi kroz čitav prostor gomile, identificira / označava neiskorištene (null ili dead) predmete i briše sve te objekte.
  • Imajte na umu da brišući predmeti iz hrpe prostora stvorit će rupe u memoriji uzrokujući curenje memorije. Da bi se izbjegao takav scenarij Skupljač smeća provodi sabijanje memorijskog prostora

Primjeri sakupljača smeća na Javi

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

Izlaz:

Objekt

Objašnjenje gornjeg koda

  • U gornjem kôdu dva objekta obj1 i obj2 usmjereni su na null pa su pohranjeni u Eden prostor s null i nereferenciranim vrijednostima
  • Sustav gc () pozvat će demonsku nit sakupljanja smeća i oba objekta su izbrisana iz prostora.

Razlozi i nedostaci

Slijedi nekoliko prednosti i nedostataka Java Garbage Collector kako slijedi:

Pros za gc:

  • Skupljanje smeća povećava efikasnost memorije jer će izbrisati sve neiskorištene i null predmete
  • Skupljanje smeća automatski je proces, tako da programer možda neće voditi brigu o tome, jer se na drugim jezicima bez programera za odvoz smeća mora pobrinuti za neuhvatljiv problem s memorijom.

Slabosti gc-a:

  • Skupljač smeća pokrenut će glavnu gc funkciju koja će se kretati kroz čitav prostor hrpe, čineći vaš program brzinu polako nekoliko sekundi.
  • Ovaj će postupak trajati više vremena CPU-a.
  • Ako radite na aplikaciji koja zahtjeva ogromnu memoriju, iskoristite JVM zastave.
  • Ako je prostora hrpe puno i predmeti se ne mogu pomicati ili dodavati dalje, Java izbacuje grešku u memoriji što će usporiti cijelu aplikaciju i može prouzročiti curenje memorije.

Preporučeni članci

Ovo je vodič Što je Java Garbage Collector ?. Ovdje smo raspravljali o njegovom radu zajedno s funkcijama, primjerom, pro i kontra Java sakupljača smeća. Možete pogledati i sljedeće članke da biste saznali više -

  1. Konstruktor i destruktor na Javi
  2. Destruktor na Javi
  3. Izvedba C # i Java
  4. Što je JVM?