Mikä on Java Garbage Collector? - Opas Java Garbage Collector -sovellukseen

Sisällysluettelo:

Anonim

Mikä on Java Garbage Collector?

Roskakori on daemon-lanka, joka vapauttaa muistia suorituksen aikana. Jätekeräys voidaan ilmaista myös muistin kierrätyksenä. Lähinnä JVM: ssä käytetään Oracle-hotspot-roskien kerääjää sen tehokkuuden vuoksi. JVM: n muistialuetta, johon objektit luodaan, kutsutaan kasaksi. Kasa on jaettu kahteen osaan:

  1. Nuoren sukupolven tila
  2. Vanha / huollettu sukupolven tila

Nuori sukupolvi on jälleen jaettu kolmeen osaan

  1. Eedenin tila
  2. Survivor Alkaen
  3. Selviytyjä

Seuraavissa kohdissa on annettu perusteellisempi selitys. Esimerkiksi, jos olet luonut välimuistin ohjelmaan ja jos välimuistiobjektii selvisi monista GC-jaksoista, se menee vanhaan sukupolveen. GC etsii esineitä, joita ohjelma ei enää tarvita, ja tuhoaa ne.

Miksi roskien kerääjä?

Ennen Java-versiota kaksi suosituinta kieltä oli C ja C ++. C: ssä olemme tavanneet calloc (), malloc (), realloc (), jotka allokoivat puskurimuistin, ja C ++: ssa meillä on destruktoreita. Kaikki nämä toiminnot koskevat ominaisuutta nimeltä muistinhallinta. Java tarjoaa jätteiden keräilijän automaattisena muistinhallintana kahdesta pääasiallisesta syystä:

  • Joistakin luotuista objekteista tulee saavuttamattomia
  • Viittauksia vanhoista esineistä nuoriin esineisiin esiintyy vain vähän.

Paras tapa jätekeräimen käyttämiseen on asettaa liput JVM: lle.

Annan teille esimerkin saavuttamattomista esineistä

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

Yllä olevassa esimerkissä Java luo merkkijonoobjektin ja objektin laajuus on vain siinä määrin, että lohkoa ei voida käyttää ulkopuolella. Siten, kun roskat kerätään tämän luokan yli, se merkitsee 's' tavoittamattomaksi ja käyttämättömäksi esineeksi ja poistaa sen.

Toiminnot jätekeräimessä

  • Merkki: Aloittaa sovelluksesi (pää) juurisolmusta, kävelee objektikaaviota, merkitsee kohteita, jotka ovat tavoitettavissa elämänä.
  • Poista / pyyhkäise: Poista tavoittamattomat objektit. Kun GC poistaa esineitä, se luo reikä kasaan tekemällä siitä epäjohdonmukaisen. Siten käytetään tiivistämistä.
  • Tiivistäminen: Tiivistä muisti liikkumalla objektien ympäri ja merkitsemällä allokointi vierekkäin kuin hajanaisena. Se on aikaa vievä tehtävä.

Kuinka Java Garbage Collector toimii?

  • Kohteita on kahta tyyppiä:

Live-objektit: tavoitettavissa (viitteet toisesta objektista)

Kuolleet esineet: Ei tavoitettavissa (ei viitattu mistään)

  • Kaikki vastikään luodut objektit luodaan Eden-tilassa (Nuoren sukupolven tila).
  • Kun Eden-tila on täynnä, YoungGene-tilassa ajetaan minorGC () -ohjelma, joka merkitsee kaikki käyttämättömät tai kuolleet esineet ja pyyhkii ne muistista.
  • Tämän GC-syklin selvinneet esineet siirretään Survivor From Space -tilaan. Sama prosessi toistuu ja tällä kertaa, kun esineitä siirretään Eden-tilasta Survivor Space -tilaan, GC tarkistaa onko se täynnä, kuolleet esineet vapautetaan ja elossa olleet kohteet siirretään myös Survivoriin.
  • Tämä prosessi toistetaan ja jos jotkut objektit selvisivät GC-syklien kynnyksestä, ne siirretään vanhan sukupolven tilaan.
  • Tässä skenaariossa JVM ajaa majorGC () -toimintoa, joka kulkee täydellisen kasan tilan läpi, tunnistaa / merkitsee käyttämättömät (tyhjät tai kuolleet) esineet ja pyyhkäisee kaikki nämä objektit.
  • Muista, että esineiden pyyhkiminen kasa-avaruudesta luo reikiä muistiin aiheuttaen muistin vuodon. Tällaisen skenaarion välttämiseksi jätekeräin toteuttaa muistitilan tiivistämisen

Esimerkkejä Java-roskakorista

Esimerkki 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();
)
)

lähtö:

Esine

Edellä olevan koodin selitys

  • Yllä olevassa koodissa kaksi objektia obj1 ja obj2 osoittavat nollaksi, joten ne tallennetaan Eden-tilaan nolla-arvoilla, joihin ei viitata
  • Järjestelmä gc () kutsuu demonin säiettä roskien keräämiseen ja molemmat esineet poistetaan tilasta.

Hajat ja haitat

Alla on joitain Java Garbage Collector -ohjelman eduista ja haitoista seuraavasti:

Plussat gc:

  • Roskakori lisää muistin tehokkuutta, koska se poistaa kaikki käyttämättömät ja tyhjät kohteet
  • Roskakori on automaattinen prosessi, joten kehittäjä ei ehkä pidä huolta siitä, koska muilla kielillä ilman roskienkerääjää ohjelmoijan on huolehdittava vaikeasta muistiongelmasta.

Gc: n haitat:

  • Jätekeräilijä suorittaa suuren gc-toiminnon, joka kulkee koko kasan tilan läpi, jolloin ohjelman nopeus hidastuu muutamalla sekunnilla.
  • Tämä prosessi vie enemmän CPU-aikaa, mikä hidastaa koodijärjestelmää.
  • Jos työskentelet sovelluksessa, joka vaatii valtavaa muistia, käytä käytettävissä olevia JVM-lippuja.
  • Jos kasa-tila on täynnä ja esineitä ei voida siirtää tai lisätä edelleen, Java heittää muistivirheen, mikä hidastaa koko sovellusta ja voi myös aiheuttaa muistivuotoja.

Suositellut artikkelit

Tämä on opas Mikä on Java Garbage Collector? Täällä keskustellaan sen työskentelystä yhdessä Java-roskien kerääjän toimintojen, esimerkkien, haittojen ja haittojen kanssa. Voit myös katsoa seuraavia artikkeleita saadaksesi lisätietoja -

  1. Rakentaja ja tuhoaja Java
  2. Tuhoaja Java
  3. C # vs Java-suorituskyky
  4. Mikä on JVM?