Søppelinnsamling i Java: Alt du trenger å vite



Denne artikkelen om søppelinnsamling i Java gir deg en klar ide om hvordan det fungerer, dets typer og forskjellige metoder under søppelinnsamling i Java

er et generelt programmeringsspråk, og hvis du kommer i en situasjon der det er ubrukte data i programmet ditt og du ikke vet hvordan du skal håndtere det, kommer Garbage Collection i Java godt med. Så jeg skriver denne artikkelen for å hjelpe deg med å håndtere disse funksjonene.

Jeg vil dekke emnene i følgende rekkefølge:





La oss komme i gang!

Hva er søppelinnsamling i Java?

I Java står programmerere overfor problemet med å måtte ødelegge gjenstander som er ute av bruk. Men med søppeloppsamleren kan dette lett tas vare på. Hovedmålet med denne søppeloppsamleren er å frigjøre haugeminne ved å ødelegge objektene ikke inneholder en referanse. Teknikken er kjent som Søppelsamling.



Det betraktes også som et program som hjelper til med å utføre automatisk minnestyring. Når kjøres på JVM, blir objekter opprettet på dyngen, som faktisk er en del av minnet som er viet programmet. Etter hvert vil det ikke lenger være behov for noen objekter. De søppelmann finner disse ubrukte objektene og sletter dem for å frigjøre noe minne.

  • Programmer som ikke tildeler minne, kan til slutt bryte når det ikke er noe minne igjen i systemet å tildele. Alle disse programmene sies å ha minnelekkasjer.
  • Søppelinnsamling i Java skjer automatisk i løpet av et program, noe som eliminerer nødvendigheten av å allokere minne og dermed unngå minnelekkasjer.
  • Metoder som gratis() i C og slett () i C ++ brukes, men i Java utføres den automatisk. Så, gir bedre minnehåndtering.

La oss nå forstå hvordan denne automatiske søppelsamlingen fungerer i Java.

Merk : Et objekt sies å være kvalifisert for søppeloppsamling hvis det ikke kan nås.



Hvordan fungerer søppelinnsamling?

Garbage Collection er en prosess med å jobbe med Heap-minnet og også merke eller identifisere gjenstander som ikke kan nås og ødelegge dem med komprimering.

Søppelinnsamling i Java er en automatisk prosess, og programmereren trenger ikke å eksplisitt merke objekter som skal slettes. Gjennomføringen lever hovedsakelig i . Hver JVM kan implementere søppeloppsamling. Det eneste kravet er at den skal oppfylle JVM-spesifikasjonen.

php mysql_fetch_array

Selv om det er mange JVM-er tilgjengelig, Oracle’s HotSpot er den klart vanligste siden den tilbyr et robust og modent sett med søppeloppsamlingsalternativer.

  • HotSpot har flere søppeloppsamlere som er optimalisert for ulike bruksområder, og alle søppeloppsamlerne følger den samme grunnleggende prosessen.
  • I det aller første trinnet, uhenviste gjenstander blir identifisert og merket som klare for søppelhenting.
  • I det andre trinnet slettes de merkede objektene. Valgfritt kan hukommelsen komprimeres etter at søppeloppsamleren sletter gjenstander, slik at gjenværende gjenstander er i en sammenhengende blokk i starten av dyngen. Komprimeringsprosessen gjør det lettere å tildele minne til nye objekter sekvensielt etter minneblokken som er tildelt eksisterende objekter.

Alle HotSpots søppeloppsamlere implementerer en generasjonsinnsamlingsstrategi som kategoriserer objekter etter alder. Begrunnelsen bak generasjons søppelinnsamling er at de fleste gjenstander er kortvarige og vil være klare for søppeloppsamling snart etter opprettelsen.

La oss nå se hva som er de forskjellige typene søppeloppsamlere.

Typer søppeloppsamler

JVM tilbyr fire forskjellige søppeloppsamlere, alle generasjonelle. Hver og en har sine egne fordeler og begrensninger. Valget av hvilken søppeloppsamler du skal bruke ligger hos brukeren, og det kan være mange forskjeller i gjennomstrømningen og applikasjonspausene.

Det er nemlig 4 typer søppeloppsamlere.

  • Seriell søppeloppsamler (GC) :Alle hendelsene for søppeloppsamling blir gjennomført i en enkelt tråd. Komprimering utføres etter hver søppeloppsamling.
  • Parallell / gjennomstrømning GC: Flere tråder brukes til mindre / små søppeloppsamlinger. En enkelt tråd brukes til større søppeloppsamling og Old Generation komprimering. Parallell-varianten bruker også flere tråder for større søppeloppsamling og komprimering av gamle generasjoner.
  • CMS Collector :Flere tråder brukes til liten / mindre søppeloppsamling ved hjelp av samme algoritme som Parallel. Størstedelen av søppeloppsamlingen er flertrådet, men CMS kjører samtidig sammen med søknadsprosessene for å minimere applikasjonshendelser. Ingen komprimering utføres.
  • G1 Samler :Denne søppeloppsamleren er i utgangspunktet ment som en erstatning for CMS. Det er parallelt og samtidig som CMS, men det fungerer ganske annerledes når det sammenlignes med de eldre søppeloppsamlerne.

La oss forstå fordelene med søppelinnsamling på Java.

Fordeler

  • Den største fordelen med Java søppelinnsamling er at den automatisk håndterer slettingen av ubrukte gjenstander eller noen gjenstander som er utilgjengelige for å frigjøre minnesressurser.
  • Garbage Collection er nå en ny standardkomponent i mange populære programmeringsspråk.
  • Det gjør Java-minneeffektivt. Det er fordi søppeloppsamleren fjerner objektene som ikke er referert fra hukommelsen.
  • Det er automatisk utført av søppeloppsamleren som er en del av JVM.

Beste praksis

Den beste tilnærmingen for å tilpasse seg Java-søppelsamlingen er å sette flagg på JVM. Flagg har muligheten til å justere søppeloppsamleren som skal brukes. Det hjelper til med å gjøre det best egnet for behandling av backend der lange pauser for søppeloppsamling er akseptable.

En annen ting å merke seg her er at CMS søppeloppsamleren er designet for å minimere pauser, noe som gjør den ideell for GUI-applikasjoner der respons er svært viktig. Ytterligere finjustering kan oppnås ved å endre størrelsen på dyngen eller dens seksjoner og måle søppeloppsamlingseffektiviteten.

La oss ta en titt på dette programmet.

klasse Edureka {int a int b public void setData (int c, int d) {a = cb = d} public void showData () {System.out.println ('Value of a =' + a) System.out.println ('Value of b =' + b)} public static void main (String args []) {Edureka e1 = new Edureka () Edureka e2 = new Edureka () e1.setData (1,2) e2.setData (3, 4) e1.showData () e2.showData () // Edureka e3 // e3 = e2 //e3.showData () // e2 = null //e3.showData () // e3 = null //e3.showData ()}}

I dette tilfellet de toobjekter og to referansevariabler opprettes. Hvis du legger til en ny kommando e3 = Null,to referansevariabler vil peke på det samme objektet. Og hvis det ikke er noen henvisning til variabelen, e3 = e2e3.showData () På dette punktet er det ingen referanser som peker mot objektet, og det blir kvalifisert for søppeloppsamling.

hvordan sammenligne to strenger

Dette bringer oss til slutten av denne ‘Garbage Collection in Java’-artikkelen. Vi har lært hvordan du fjerner ubrukte gjenstander i dyngen og de forskjellige typer samlinger.

Hvis du fant denne artikkelen om “Garbage Collection in Java”, sjekk ut av Edureka, et pålitelig online læringsfirma med et nettverk av mer enn 250 000 fornøyde elever spredt over hele verden. Vi er her for å hjelpe deg med hvert trinn på reisen, vi kommer med en læreplan som er designet for studenter og fagpersoner som ønsker å være Java-utvikler.

Har du et spørsmål til oss? Vennligst nevn det i kommentarfeltet i denne “søppel samlingen i Java ' og vi kommer tilbake til deg så snart som mulig.