Č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:
- Priestor mladej generácie
- Starý / udržiavaný generačný priestor
Mladá generácia je opäť rozdelená na 3 časti
- Eden priestor
- Pozostalý z
- 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 -
- Konštruktor a Destructor v Jave
- Destruktor v Jave
- C # vs výkon Java
- Čo je JVM?