Wat is Java Garbage Collector? - Handleiding voor Java Garbage Collector

Inhoudsopgave:

Anonim

Wat is Java Garbage Collector?

De vuilnisman is een daemon-thread die geheugen vrijmaakt tijdens runtime. Afvalinzameling kan ook worden uitgedrukt als geheugenrecycling. Meestal in JVM wordt orakel hotspot-vuilnisman gebruikt vanwege de efficiëntie. Het geheugengebied in JVM waar objecten worden gemaakt, wordt heap genoemd. Heap is verdeeld in twee delen:

  1. Jonge generatie ruimte
  2. Oude / vaste generatieruimte

De jonge generatie is opnieuw verdeeld in 3 delen

  1. Eden ruimte
  2. Overlevende van
  3. Overlevende aan

In de volgende punten is een diepere verklaring gegeven. Als u bijvoorbeeld een cache in uw programma hebt gemaakt en als het cache-object vele cycli van GC heeft overleefd, gaat het in de oude generatie. De GC zoekt naar objecten die niet langer nodig zijn voor het programma en vernietigt ze.

Waarom Garbage Collector?

Vóór Java waren twee van de meest populaire talen C en C ++. In C zijn we calloc (), malloc (), realloc () tegengekomen die buffergeheugen toewijst en in C ++ hebben we destructors. Al deze functies zijn voor de functie genaamd geheugenbeheer. Java biedt Garbage collector als automatisch geheugenbeheer om de twee belangrijkste redenen:

  • Sommige gemaakte objecten worden onbereikbaar
  • Verwijzingen van oude objecten naar jonge objecten bestaan ​​slechts in kleine aantallen.

De beste praktijk om een ​​vuilnisman te gebruiken, is vlaggen instellen op JVM.

Laat me u een voorbeeld geven voor onbereikbare objecten

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

In het bovenstaande voorbeeld zal Java een stringobject maken en de reikwijdte van dat object is alleen dat als het blok niet buiten kan worden gebruikt. Dus als garbage collection deze klasse overschrijdt, markeert het 's' als onbereikbaar en ongebruikt object en zal het verwijderen.

Functies in Garbage Collector

  • Markeren: start vanaf het hoofdknooppunt van uw toepassing (hoofd), loopt de objectgrafiek af, markeert objecten die bereikbaar zijn als leven.
  • Verwijderen / vegen: verwijder onbereikbare objecten. Wanneer GC objecten verwijdert, maakt het een gat in de heap waardoor het inconsistent is. Aldus wordt verdichting gebruikt.
  • Verdichten: comprimeer het geheugen door rond de objecten te bewegen en de toewijzing aaneengesloten dan gefragmenteerd te markeren. Het is een tijdrovende taak.

Hoe werkt Java Garbage Collector?

  • Er zijn twee soorten objecten:

Live Objects: Reachable (referenties van een ander object)

Dead Objects: Unreachable (nergens naar verwezen)

  • Alle nieuw gemaakte objecten worden gemaakt in de Eden-ruimte (Young Generation-ruimte).
  • Zodra de Eden-ruimte vol is, wordt een minorGC () -programma uitgevoerd op Young Generation-ruimte die alle ongebruikte of dode objecten markeert en uit het geheugen haalt.
  • De objecten die deze GC-cyclus hebben overleefd, worden verplaatst naar Survivor vanuit de ruimte. Hetzelfde proces herhaalt zich en dit keer wanneer objecten van Eden naar Survivor worden verplaatst. Vanuit de ruimte controleert GC of het vol is, de dode objecten worden vrijgegeven en overleefde objecten worden ook naar Survivor verplaatst.
  • Dit proces wordt herhaald en sommige objecten hebben een drempelwaarde van GC-cycli overleefd, die objecten worden verplaatst naar de ruimte van de oude generatie.
  • In dit scenario voert JVM de majorGC () -functie uit die door de volledige heapruimte loopt, ongebruikte (lege of dode) objecten identificeert / markeert en al deze objecten veegt.
  • Vergeet niet dat het vegen van objecten uit de heapruimte gaten in het geheugen veroorzaakt, waardoor een geheugenlek ontstaat. Om een ​​dergelijk scenario te voorkomen, implementeert Garbage collector verdichting van geheugenruimte

Voorbeelden van Garbage Collector op Java

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

Output:

Voorwerp

Verklaring van de bovenstaande code

  • In de bovenstaande code verwijzen de twee objecten obj1 en obj2 naar null, zodat ze worden opgeslagen in de Eden-ruimte met null en niet-gerefereerde waarden
  • System gc () roept een daemon-thread van garbage collection op en beide objecten worden uit de ruimte verwijderd.

Prons en tegens

Hieronder staan ​​enkele voor- en nadelen van Java Garbage Collector als volgt:

Voordelen van gc:

  • Garbage collection verhoogt de geheugenefficiëntie omdat alle ongebruikte en null-objecten worden verwijderd
  • Een vuilnisman is een automatisch proces, dus de ontwikkelaar zorgt er misschien niet voor, omdat in andere talen zonder een vuilnisman programmeur voor ongrijpbare geheugenproblemen moet zorgen.

Nadelen van gc:

  • De afvalverzamelaar zal een belangrijke gc-functie uitvoeren die door de hele heap-ruimte loopt, waardoor uw programma enkele seconden langzaam wordt.
  • Dit proces neemt meer CPU-tijd in beslag waardoor het codesysteem langzamer wordt.
  • Als u werkt aan een applicatie die enorm veel geheugen nodig heeft, maak dan gebruik van JVM-vlaggen.
  • Als de heap-ruimte vol is en objecten niet kunnen worden geveegd of verder toegevoegd, gooit Java de geheugenfout weg waardoor de hele toepassing wordt vertraagd en ook geheugenlekken kunnen ontstaan.

Aanbevolen artikelen

Dit is een gids voor Wat is Java Garbage Collector ?. Hier bespreken we de samenwerking met functies, voorbeelden, voor- en nadelen van de Java-vuilnisman. U kunt ook de volgende artikelen bekijken voor meer informatie–

  1. Constructor en Destructor in Java
  2. Destructor in Java
  3. C # versus Java-prestaties
  4. Wat is JVM?