Čo je to Java Garbage Collector? - Sprievodca programom Java Garbage Collector

Obsah:

Anonim

Čo je to Java Garbage Collector?

Zberač odpadu je vlákno démona, ktoré počas behu programu uvoľňuje pamäť. Zber odpadu sa dá vyjadriť aj ako recyklácia pamäte. Najčastejšie v JVM sa kvôli svojej účinnosti používa zberateľ odpadkov orámovania hotspot. Oblasť pamäte v JVM, kde sa vytvárajú objekty, sa nazýva halda. Halda je rozdelená na dve časti:

  1. Priestor mladej generácie
  2. Starý / udržiavaný generačný priestor

Mladá generácia je opäť rozdelená na 3 časti

  1. Eden priestor
  2. Pozostalý z
  3. Pozostalý

V ďalších bodoch je uvedené podrobnejšie vysvetlenie. Napríklad, ak ste vo svojom programe vytvorili vyrovnávaciu pamäť a objekt cache prežil mnoho cyklov GC, prejde do starej generácie. GC hľadá objekty, ktoré už program nepotrebuje, a ničí ich.

Prečo Zberač odpadu?

Pred Java boli dva z najpopulárnejších jazykov C a C ++. V C sme narazili na calloc (), malloc (), realloc (), ktoré alokujú vyrovnávaciu pamäť av C ++ máme deštruktory. Všetky tieto funkcie sa týkajú funkcie nazývanej správa pamäte. Java poskytuje zberač odpadu ako automatickú správu pamäte z dvoch hlavných dôvodov:

  • Niektoré vytvorené objekty sa stanú nedostupnými
  • Odkazy zo starých objektov na mladé objekty existujú iba v malom počte.

Najlepším postupom pri použití zberača odpadu je nastavenie vlajok na JVM.

Dovoľte mi uviesť príklad nedostupných predmetov

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

Vo vyššie uvedenom príklade Java vytvorí reťazcový objekt a rozsah tohto objektu je taký, že ak blok nemožno použiť vonku. Keď teda zbierka odpadkov prechádza cez túto triedu, označí znak 's' ako nedostupný a nepoužitý objekt a odstráni ho.

Funkcie v zberači odpadu

  • Značka: Začína od koreňového uzla vašej aplikácie (hlavný), prejde grafom objektov a označí objekty, ktoré sú dosiahnuteľné ako život.
  • Vymazať / Zamiesť: Vymaže nedostupné objekty. Keď GC odstráni objekty, vytvorí v halde dieru, čo ju urobí nekonzistentnou. Používa sa teda lisovanie.
  • Zhutňovanie: Zhutňovanie pamäte pohybom po objektoch a označovaním susediacich ako rozdelených častí. Je to časovo náročná úloha.

Ako funguje Java Garbage Collector?

  • Existujú dva typy objektov:

Živé objekty: dosiahnuteľné (referencie z iného objektu)

Mŕtve objekty: nedostupné (odkiaľkoľvek nie je uvedené)

  • Všetky novovytvorené objekty sa vytvárajú v priestore Eden (Young Generation space).
  • Akonáhle je priestor Eden plný, spustí sa program SmallGC () v priestore Young Generation, ktorý označí všetky nepoužité alebo mŕtve objekty a vymaže ich z pamäte.
  • Objekty, ktoré prežili tento cyklus GC, budú presunuté do priestoru Survivor z vesmíru. Rovnaký proces sa opakuje a tentoraz, keď sa objekty presunú z Edenovho priestoru do Survivoru, GC skontroluje, či je plný, či sú mŕtve objekty uvoľnené a prežité objekty sa presunú do Survivoru.
  • Tento proces sa opakuje a niektoré objekty prežili prahovú hodnotu bez GC cyklov, tieto objekty sa presunuli do priestoru starej generácie.
  • V tomto scenári JVM spúšťa funkciu majorGC (), ktorá prechádza celým priestorom haldy, identifikuje / označí nepoužívané (nulové alebo mŕtve) objekty a zameta všetky tieto objekty.
  • Pamätajte, že zametanie objektov z haldy vytvorí v pamäti diery, čo spôsobí vytečenie pamäte. Aby sa zabránilo takémuto scenáru, zberač odpadu implementuje zhutňovanie pamäťového priestoru

Príklady zberača odpadu v Jave

Príklad 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();
)
)

Výkon:

objekt

Vysvetlenie vyššie uvedeného kódu

  • Vo vyššie uvedenom kóde dva objekty obj1 a obj2 smerujú na null, takže sú uložené do priestoru Eden s null a neregistrovanými hodnotami.
  • Systém gc () vyvolá démonové vlákno zberu odpadkov a oba objekty sa z priestoru odstránia.

Próny a nevýhody

Nižšie sú uvedené niektoré výhody a nevýhody Java Garbage Collector takto:

Výhody gc:

  • Zbierka odpadkov zvyšuje efektívnosť pamäte, pretože odstráni všetky nepoužité a nulové objekty
  • Zberač odpadu je automatický proces, takže vývojár sa o to nemusí postarať, pretože v iných jazykoch bez programátora zberača odpadu sa musí programátor postarať o problém s nevyhovujúcou pamäťou.

Nevýhody gc:

  • Zberač odpadu bude prevádzkovať hlavnú funkciu gc, ktorá bude prebiehať celým priestorom haldy, čím sa rýchlosť vášho programu pomaly zvýši o niekoľko sekúnd.
  • Tento proces zaberie viac času CPU, aby sa kódový systém spomalil.
  • Ak pracujete na aplikácii vyžadujúcej veľkú pamäť, využite príznaky JVM.
  • Ak je priestor haldy plný a objekty sa nedajú posunúť alebo pridať ďalej, Java vyhodí chybu pamäte, čo spomalí celú aplikáciu a tiež môže spôsobiť úniky pamäte.

Odporúčané články

Toto je sprievodca, čo je Java Garbage Collector ?. Tu diskutujeme o jeho práci spolu s funkciami, príkladmi a nevýhodami zberača odpadu Java. Viac informácií nájdete aj v nasledujúcich článkoch -

  1. Konštruktor a Destructor v Jave
  2. Destruktor v Jave
  3. C # vs výkon Java
  4. Čo je JVM?