Mis on Java prügikoguja? - Java prügikoguja juhend

Lang L: none (table-of-contents):

Anonim

Mis on Java prügikoguja?

Prügikoguja on deemonniit, mis vabastab käituse ajal mälu. Prügivedu võib väljendada ka mälu taaskasutusena. Enamasti JVM-is kasutatakse selle efektiivsuse tõttu Oracle hotspot prügikogujat. JVM-i mäluala, kus objektid luuakse, nimetatakse hunnikuks. Hunnik on jagatud kaheks osaks:

  1. Noore põlvkonna ruum
  2. Vana / teenitud põlvkonna ruum

Noor põlvkond jaguneb jällegi kolmeks osaks

  1. Eedeni ruum
  2. Ellujäänu alates
  3. Ellujäänu

Järgmistes punktides on antud põhjalikum selgitus. Näiteks kui lõite oma programmis vahemälu ja kui vahemäluobjekt ületas palju GC tsükleid, läheb see vanasse põlvkonda. GC otsib objekte, mida programm enam ei vaja, ja hävitab need.

Miks just prügikoguja?

Enne Java oli kaks kõige populaarsemat keelt C ja C ++. C-s oleme kohanud calloc (), malloc (), realloc (), mis eraldavad puhvermälu, ja C ++ -s on meil hävitajad. Kõik need funktsioonid on mõeldud funktsiooniks, mida nimetatakse mäluhalduseks. Java pakub prügikogujat automaatseks mäluhalduseks kahel kahel põhjusel:

  • Mõned loodud objektid muutuvad kättesaamatuks
  • Viiteid vanadelt objektidelt noortele objektidele on ainult vähe.

Parim tava prügivedaja kasutamiseks on lippude seadmine JVM-ile.

Lubage mul tuua näide kättesaamatute objektide kohta

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

Ülaltoodud näites loob Java stringiobjekti ja selle objekti ulatus on just see, kui plokki ei saa väljaspool kasutada. Seega, kui prügikoristus selle klassi kohal jookseb, tähistab see märke „s” kättesaamatu ja kasutamata objektina ning kustutab selle.

Funktsioonid prügikogujas

  • Mark: algab teie rakenduse juursõlmest (peamine), kõnnib objektide graafikut, tähistab objekte, mis on eluga juurdepääsetavad.
  • Kustuta / pühi: kustutage kättesaamatud objektid. Kui GC objektid kustutab, loob see hunnikusse augu, muutes selle ebajärjekindlaks. Seega kasutatakse tihendamist.
  • Tihendamine: kompakteerige mälu, liikudes objektidel ringi ja märkides jaotuse külgnevaks kui killustatud. See on aeganõudev ülesanne.

Kuidas Java prügikoguja töötab?

  • Objekte on kahte tüüpi:

Reaalajas olevad objektid: juurdepääsetavad (viited teiselt objektilt)

Surnud objektid: Ligipääsmatu (pole kuskilt viidatud)

  • Kõik vastloodud objektid luuakse Eedeni ruumis (noore põlvkonna ruumis).
  • Kui Eedeni ruum on täis, käivitatakse noore generatsiooni ruumis minorGC () programm, mis tähistab kõik kasutamata või surnud objektid ja pühib need mälust.
  • Objektid, kes selle GC tsükli üle elasid, teisaldatakse kosmosesse kosmosesse. Sama protsess kordub ja seekord, kui objektid viiakse Eedeni ruumist Survivor Space'i, kontrollib GC, kas see on täis, surnud objektid vabastatakse ja ellujäänud objektid kolitakse ka Survivorisse.
  • Seda protsessi korratakse ja kui mõned objektid ületasid GC-tsüklite künnise, liigutatakse need objektid Vana põlvkonna ruumi.
  • Selle stsenaariumi korral käivitab JVM funktsiooni majorGC (), mis läbib kogu hunniku ruumi, tuvastab / märgib kasutamata (tühised või surnud) objektid ja pühib kõik need objektid.
  • Pidage meeles, et objektide pühkimine kuhjaga ruumist tekitab mälus auke, põhjustades mälu leket. Sellise stsenaariumi vältimiseks viib prügikoguja kokku mäluruumi tihendamise

Näited Java prügikogujast

Näide süsteemist.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äljund:

Objekt

Eespool toodud koodi selgitus

  • Ülaltoodud koodis osutavad kaks objekti obj1 ja obj2 nullile, nii et need salvestatakse Eedeni ruumi, millel on null- ja viiteväärtused
  • Süsteem gc () kutsub esile prügikoristuse deemonniidi ja mõlemad objektid kustutatakse ruumist.

Plussid ja miinused

Allpool on mõned Java Prügikoguja plussid ja miinused järgmiselt:

Gc plussid:

  • Prügivedu suurendab mälu efektiivsust, kuna see kustutab kõik kasutamata ja olematud objektid
  • Prügivedu on automaatne protsess, nii et arendaja ei pruugi selle eest hoolitseda, sest teistes keeltes peab prügivedaja ilma programmeerijata hoolitsema raskesti mäluprobleemi eest.

Miinused gc-st:

  • Prügikoguja käivitab peamise gc-funktsiooni, mis töötab läbi kogu hunniku ruumi, muutes teie programmi mõne sekundi jooksul aeglaseks.
  • See protsess võtab rohkem protsessori aega, muutes koodisüsteemi aeglasemaks.
  • Kui töötate rakenduse jaoks, mis nõuab tohutut mälu, kasutage JVM-i lippe.
  • Kui hunnik ruumi on täis ja objekte ei saa edasi pühkida ega lisada, siis viskab Java välja mäluvea, mis aeglustab kogu rakendust ja võib põhjustada mälulekke.

Soovitatavad artiklid

See on juhend teemal Mis on Java Prügikoguja ?. Siin käsitleme selle toimimist koos Java prügikoguja funktsioonide, näiteks plusside ja miinustega. Lisateabe saamiseks võite vaadata ka järgmisi artikleid -

  1. Konstruktor ja hävitaja Java-s
  2. Hävitaja Java-s
  3. C # vs Java jõudlus
  4. Mis on JVM?