Mis on mälu jaotamine Java-s? Virna- ja kuhjamälu

See artikkel, mis põhineb jaotisel „Mälu jaotamine Java-s”, aitab teil saada üksikasjalikke teadmisi mälu jaotamise kohta koos Stacki ja Heap'i andmestruktuuridega.

Mälu eraldamine on protsess, mille käigus arvutiprogrammid ja teenused määratakse füüsiliste või virtuaalsetega mälu ruumi. Selles artiklis õpime mälu jaotamise kohta ja arutame virna- ja kuhjamälu.

Mis on korstmälu?

Java Stacki mälu kasutatakse lõime käivitamiseks. Need sisaldavad meetodipõhiseid väärtusi, mis on lühiajalised, ja viiteid teistele kuhja objektidele, millele meetodist viidatakse.





Virn mälule viidatakse alati LIFO (viimane-esimene-esimene-väljund) tellimus. Alati, kui meetodit käivitatakse, luuakse virna mällu uus plokk, mis hoiab kohalikke primitiivseid väärtusi ja viiteid meetodi teistele objektidele.

Niipea kui meetod lõpeb, muutub blokk kasutamata ja järgmise meetodi jaoks kättesaadavaks.



mis on andmed teaduses

Virnamälu suurus on Heap-mäluga võrreldes väga väike.

Pinu mälu põhijooned

Lisaks sellele, mida oleme seni arutanud, on järgmised mõned muud omadused Virn mälu:

  • See kasvab ja kahaneb, kui uusi meetodeid vastavalt kutsutakse ja tagastatakse
  • Virna sees olevad muutujad eksisteerivad ainult seni, kuni nende loomise meetod töötab
  • See on automaatselt eraldatakse ja jaotatakse, kui meetod lõpetab täitmise
  • Kui see mälu on täis, viskab Java java.lang.StackOverFlowError
  • Juurdepääs sellele mälule on kiiresti kuhja mäluga võrreldes
  • See mälestus on niidikindel kuna iga niit töötab oma virnas

Meetodid Stacki klassis

  • Objekti surumine ( Objekti element ): Lükkab virna ülaosas oleva elemendi.
  • Objekti pop (): Eemaldab ja tagastab virna ülemise elemendi. An ‘EmptyStackException’ erand on visatud, kui kutsume pop (), kui kutsuv virn on tühi.
  • Objekti piilumine (): Tagastab elemendi virna ülaosas, kuid ei eemalda seda.
  • Loogiline tühi (): See taastub tõesena, kui virna ülaosas pole midagi. Muul juhul tagastab vale.
  • int otsing ( Objekti element ): See määrab, kas korstnas on objekt olemas. Kui element leitakse, tagastab see elemendi asukoha virna ülaosast. Muidu tagastab -1.

Java kood virna juurutamiseks

import java.io. * import java.util. * klass Test {static void stack_push (Stack stack) {for (int i = 0 i<5 i++){ stack.push(i) } } static void stack_pop(Stack stack){ System.out.println('Pop :') for(int i = 0 i < 5 i++){ Integer y = (Integer) stack.pop() System.out.println(y) } } static void stack_peek(Stack stack){ Integer element = (Integer) stack.peek() System.out.println('Element on stack top : ' + element) } static void stack_search(Stack stack, int element){ Integer pos = (Integer) stack.search(element) if(pos == -1) System.out.println('Element not found') else System.out.println('Element is found at position ' + pos) } public static void main (String[] args){ Stack stack = new Stack() stack_push(stack) stack_pop(stack) stack_push(stack) stack_peek(stack) stack_search(stack, 2) stack_search(stack, 6) } } 

// Väljund



memory-allocation-in-java

Liigugem nüüd Heap Space'i.

Hunniku ruum Java-s

Mälu eraldatakse programmeerijate kirjutatud käskude täitmise ajal. Pange tähele, et hunniku nimel pole kuhja andmestruktuuriga midagi pistmist. Seda nimetatakse hunnikuks, sest see on hunnik mälupinda, mida programmeerijad saavad kasutada eraldatud ja eraldama. Kui programmeerija ei käsitu selle mäluga hästi, saab mäluleke hakkamajuhtuda programmis.

Java kuhjaga mälu põhijooned

  • Lisaks sellele, mida oleme seni arutanud, on kuhjaruumi mõned muud omadused:
  • Sellele pääseb juurde keerukate mäluhaldustehnikate kaudu, mis hõlmavad järgmist Noor põlvkond, vana või Tenured Generation, ja Alaline põlvkond
  • Kui kuhjakoht on täis, viskab Java java.lang.OutOfMemoryError
  • Juurdepääs sellele mälule on suhteliselt aeglasem kui korstmälul
  • Erinevalt virnast ei eraldata seda mälu automaatselt. See vajab Prügikorjaja kasutamata objektide vabastamiseks, et säilitada mälukasutuse tõhusus
  • Erinevalt virnast pole hunnik seda niidikindel ja seda tuleb koodi õigesti sünkroonides valvata

Java kuhjaruumi ja virnamälu erinevus

Eespool toodud selgituste põhjal võime hõlpsalt järeldada järgmisi erinevusi Hunnik ja Virn mälu.

  • Hunnik mälu kasutavad kõik rakenduse osad, samas kui virnamälu kasutab ainult üks teostusniit.
  • Alati, kui objekt luuakse, salvestatakse see alati kuhja ruumi ja korstemälus on sellele viide. Ainult mälumälu sisaldab kohalikud primitiivsed muutujad ja võrdlusmuutujad kuhja ruumis olevatele objektidele.
  • Hunnikusse salvestatud objektidele on ülemaailmne juurdepääs, samas kui virnamälule ei pääse juurde muud lõimed.
  • Virna mäluhaldus toimub a LIFO samal ajal kui see on Heap-mälus keerulisem, kuna seda kasutatakse kogu maailmas. Hunnikmälu jaguneb Noor põlvkond, vana põlvkond jne, lisateavet Java Garbage Collectionist.
  • Virnamälu on lühiajaline arvestades, et kuhjamälu elab rakenduse käivitamise algusest kuni lõpuni.
  • Me saame kasutada -XMX ja -XMS JVM-i võimalus määratleda hunniku mälu käivitamise suurus ja maksimaalne suurus. Me saame kasutada -XSS virna mälu suuruse määramiseks.
  • Kui virnamälu on täis, viskab Java runtime java.lang.StackOverFlowError kui hunnik mälu on täis, siis see viskab java.lang.OutOfMemoryError: Java kuhjaruumviga.
  • Virnamälu on Heap-mäluga võrreldes väga väike. Mälu jaotamise lihtsuse tõttu (LIFO), virna mälu on võrguga võrreldes väga kiirekuhja mälu.

Võrdlusdiagramm

PARameeter VIRN HEAP
Põhiline Mälu eraldatakse külgnevas plokisMälu eraldatakse juhuslikus järjekorras
Eraldamine ja jaotamine Automaatne kompilaatori pooltProgrammeerija käsiraamat
Maksumus VähemVeel
Rakendamine RaskeLihtne
Juurdepääsu aeg KiireminiAeglasemalt
Põhiküsimus Mälu puudusMälu killustatus
Erinevuse asukoht SuurepäranePiisav
Paindlikkus Fikseeritud intressimääragaSuuruse muutmine on võimalik

Sellega jõuame selle õpetuse „Mälu jaotamine Java-s“ lõpule. Loodan, et olete mõistest ja selle rakendamisest aru saanud reaalajas toodud näidete kaudu.

Nüüd, kui olete aru saanudMälu eraldamine Java-sSelle artikli 'Mälu jaotamine Java-s' kaudu tutvuge põhiteavetega autor Edureka, usaldusväärne veebiõppeettevõte, mille võrgustik koosneb enam kui 250 000 rahulolevast õppijast ja mis levib üle kogu maailma. Edureka Java J2EE ning SOA koolitus- ja sertifitseerimiskursused on mõeldud õpilastele ja spetsialistidele, kes soovivad olla Java arendajad. Kursus on mõeldud selleks, et anda Java-programmeerimisele edukas algus ja õpetada teid nii Java-põhiprogrammide kui ka täiustatud kontseptsioonide ning erinevate Java-raamistike jaoks, nagu näiteks talveunerežiim ja Kevad .

Kas teil on meile küsimus? Mainige seda selle ajaveebi “Mälu jaotamine Java-s” kommentaaride jaotises ja võtame teiega ühendust niipea kui võimalik.