Co je Java Garbage Collector?
Sběratel odpadu je démonové vlákno, které během běhu uvolní paměť. Sběr odpadu lze také vyjádřit jako recyklace paměti. Většinou se v JVM používá sběratel odpadků orámování hotspotů kvůli jeho účinnosti. Oblast paměti v JVM, kde se vytvářejí objekty, se nazývá halda. Halda je rozdělena na dvě části:
- Prostor mladé generace
- Starý / udržovaný generační prostor
Mladá generace je opět rozdělena do 3 částí
- Edenův prostor
- Pozůstalý z
- Pozůstalost
V dalších bodech bylo uvedeno hlubší vysvětlení. Pokud jste například v programu vytvořili mezipaměť a objekt mezipaměti přežil mnoho cyklů GC, přejde do staré generace. GC hledá objekty, které již program nepotřebuje, a ničí je.
Proč Sběratel odpadu?
Před Javou byly dva nejoblíbenější jazyky C a C ++. V C jsme narazili na calloc (), malloc (), realloc (), které budou alokovat vyrovnávací paměť a v C ++ máme destruktory. Všechny tyto funkce jsou určeny pro funkci zvanou správa paměti. Java poskytuje Garbage collector jako automatickou správu paměti z hlavních dvou důvodů:
- Některé vytvořené objekty se stanou nedostupnými
- Odkazy ze starých objektů na mladé objekty existují pouze v malém počtu.
Doporučené použití sběratele odpadu je nastavení příznaků na JVM.
Dovolte mi uvést příklad nedostupných předmětů
//class code
int i = 1;
if(i == 1)(
String s = abc;
System.out.println(s);
)
//class code
Ve výše uvedeném příkladu Java vytvoří řetězcový objekt a rozsah tohoto objektu je jen v tom, že pokud blok nelze použít venku. Když tedy bude v této třídě probíhat sběr odpadu, označí 's' jako nedostupný a nepoužitý objekt a odstraní jej.
Funkce v garbage collector
- Označit: Spouští se od kořenového uzlu vaší aplikace (hlavní), prochází grafem objektů a označuje objekty, které jsou dosažitelné jako život.
- Odstranit / Zamést: Vymaže nedostupné objekty. Když GC odstraní objekty, vytvoří díru v haldě, což ji učiní nekonzistentní. Používá se tedy hutnění.
- Komprimace: Kompaktujte paměť pohybem po objektech a označením přiřazení sousedících než fragmentovaných. Je to časově náročný úkol.
Jak funguje Java Garbage Collector?
- Existují dva typy objektů:
Živé objekty: dosažitelné (odkazy z jiného objektu)
Mrtvé objekty: Nedostupné (nikde neodkazuje)
- Všechny nově vytvořené objekty jsou vytvořeny v prostoru Eden (Young Generation space).
- Jakmile je prostor Eden plný, spustí se v prostoru Young Generation program minorGC (), který označí všechny nepoužité nebo mrtvé objekty a vymaže je z paměti.
- Objekty, které přežily tento cyklus GC, budou přesunuty do Survivor z vesmíru. Stejný proces se opakuje a tentokrát, když se objekty přesunou z Edenova prostoru do Survivoru, GC zkontroluje, zda je plný, mrtvé objekty jsou uvolněny a přežívající objekty budou přesunuty do Survivoru.
- Tento proces se opakuje a některé objekty přežily práh počtu cyklů GC, tyto objekty se přesunou do prostoru staré generace.
- V tomto scénáři JVM spustí funkci majorGC (), která prochází celým haldy, identifikuje / označí nepoužité (nulové nebo mrtvé) objekty a zametne všechny tyto objekty.
- Pamatujte, že zametání objektů z haldy vytvoří díry v paměti, což způsobí nevracení paměti. Aby se zabránilo takovému scénáři, garbage collector implementuje zhutňování paměťového prostoru
Příklady sběratele odpadu v Javě
Pří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ýstup:
Objekt
Vysvětlení výše uvedeného kódu
- Ve výše uvedeném kódu oba objekty obj1 a obj2 směřují k null, takže jsou uloženy do Edenova prostoru s null a neregistrovanými hodnotami
- Systém gc () vyvolá démonové vlákno kolekce odpadků a oba objekty jsou z prostoru odstraněny.
Prony a nevýhody
Níže jsou uvedeny některé výhody a nevýhody Java Garbage Collector takto:
Výhody gc:
- Sběr odpadu zvyšuje efektivitu paměti, protože odstraní všechny nepoužité a nulové objekty
- Sběratel odpadků je automatický proces, takže se o něj vývojář nemusí postarat, protože v jiných jazycích bez sběratelů odpadků se programátor musí postarat o nepolapitelný problém s pamětí.
Nevýhody gc:
- Sběrač odpadků bude spouštět hlavní funkci gc, která bude probíhat celým haldy, čímž se rychlost vašeho programu zpomalí o několik sekund.
- Tento proces zabere více času procesoru a zpomalí kódový systém.
- Pokud pracujete na aplikaci vyžadující velkou paměť, využijte příznaků JVM.
- Je-li prostor haldy plný a objekty nemohou být posunuty nebo přidány dále, Java vyhodí paměťovou chybu, která zpomalí celou aplikaci a také může způsobit únik paměti.
Doporučené články
Toto je průvodce Co je to Java Garbage Collector ?. Zde diskutujeme o jeho práci spolu s funkcemi, příklady, klady a zápory sběrače odpadků Java. Další informace naleznete také v následujících článcích -
- Konstruktor a ničitel v Javě
- Destruktor v Javě
- C # vs Java Performance
- Co je JVM?