Mikä on Java-muistin allokointi? Pino ja kasa muisti



Tämä artikkeli, joka perustuu 'Muistin allokointiin Java-sovellukseen', auttaa sinua saamaan yksityiskohtaisen tiedon Muistin allokoinnista sekä Pino- ja Heap-tietorakenteista.

Muistin allokointi on prosessi, jolla tietokoneohjelmat ja palvelut määritetään fyysisiksi tai virtuaalisiksi muisti tilaa. Tässä artikkelissa opitaan muistin allokoinnista ja keskustelemme pinon ja kasan muistista.

Mikä on pinomuisti?

Java Stack -muistia käytetään langan suorittamiseen. Ne sisältävät lyhytikäisiä menetelmäkohtaisia ​​arvoja ja viittauksia muihin kasan kohteisiin, joihin menetelmästä viitataan.





Pino muistiin viitataan aina LIFO (Last-in-first-out) Tilaus. Aina kun menetelmää kutsutaan, pino-muistiin luodaan uusi lohko menetelmää varten paikallisten primitiivisten arvojen ja viitteiden löytämiseksi menetelmän muihin kohteisiin.

Heti kun menetelmä päättyy, lohko muuttuu käyttämättömäksi ja tulee saataville seuraavaa menetelmää varten.



milloin käyttää tätä Java-sovelluksessa

Pino muistin koko on hyvin pieni verrattuna kasaan muistiin.

Pino-muistin tärkeimmät ominaisuudet

Sen lisäksi, mitä olemme keskustelleet tähän mennessä, on joitain muita piirteitä Pino muisti:

  • Se kasvaa ja kutistuu, kun uusia menetelmiä kutsutaan ja palautetaan vastaavasti
  • Pinoa sisältävät muuttujat ovat olemassa vain niin kauan kuin ne luonut menetelmä on käynnissä
  • Sen automaattisesti kohdennetaan ja jaetaan, kun menetelmä lopettaa suorituksen
  • Jos tämä muisti on täynnä, Java heittää java.lang.StackOverFlowError
  • Pääsy tähän muistiin on nopeasti verrattuna kasan muistiin
  • Tämä muisti on kierre turvallinen koska kukin lanka toimii omassa pinossaan

Menetelmät Stack-luokassa

  • Kohteen työntö ( Objektielementti ): Työnnä elementti pinon päälle.
  • Kohteen pop (): Poistaa ja palauttaa pinon yläosan. An ‘EmptyStackException’ poikkeus heitetään, jos kutsumme pop (): n, kun kutsuva pino on tyhjä.
  • Kohteen kurkistus (): Palauttaa elementin pinon päälle, mutta ei poista sitä.
  • Totuusarvo tyhjä (): Se palauttaa arvon tosi, jos mitään ei ole pinon päällä. Muuten palauttaa epätosi.
  • int haku ( Objektielementti ): Se määrittää, onko pinossa esine. Jos elementti löytyy, se palauttaa elementin sijainnin pinon yläosasta. Muuten se palauttaa -1.

Java-koodi pinon käyttöönottoa varten

tuo java.io. * tuo java.util. * luokan testi {staattinen void pino_push (pino pino) {kohteelle (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) } } 

// Tuotos



memory-allocation-in-java

Siirrytään nyt kasaan.

Pinoavaruus Java

Muisti varataan ohjelmoijien kirjoittamien ohjeiden suorittamisen aikana. Huomaa, että nimellä kasa ei ole mitään tekemistä kasan tietorakenteen kanssa. Sitä kutsutaan kasaksi, koska se on kasa muistia, jota ohjelmoijat voivat käyttää varattu ja vapauta. Jos ohjelmoija ei käsittele tätä muistia hyvin, muistivuoto voitapahtuu ohjelmassa.

Java Heap -muistin tärkeimmät ominaisuudet

  • Tähän mennessä keskustelemiemme lisäksi on joitain muita ominaisuuksia kasaan:
  • Siihen pääsee monimutkaisilla muistinhallintatekniikoilla, jotka sisältävät Nuori sukupolvi, vanha tai Tenuroitu sukupolvi, ja Pysyvä sukupolvi
  • Jos kasatila on täynnä, Java heittää java.lang.OutOfMemoryError
  • Pääsy tähän muistiin on suhteellisen hitaampaa kuin pinomuisti
  • Tätä muistia, toisin kuin pino, ei jaeta automaattisesti. Se tarvitsee Roskankerääjä vapauttaa käyttämättömiä esineitä muistin käytön tehokkuuden säilyttämiseksi
  • Toisin kuin pino, kasa ei ole kierre turvallinen ja sitä on valvottava synkronoimalla koodi oikein

Ero Java-kasatilan ja pinomuistin välillä

Yllä olevien selitysten perusteella voimme helposti päätellä seuraavat erot Pino ja Pino muisti.

  • Pino muistia käyttävät kaikki sovelluksen osat, kun taas pinomuistia käyttää vain yksi suoritussäike.
  • Aina kun objekti luodaan, se tallennetaan aina kasaan ja pinomuisti sisältää viittauksen siihen. Pino-muisti sisältää vain paikalliset primitiiviset muuttujat ja viitemuuttujat kasan avaruudessa oleville esineille.
  • Kasaan tallennetut objektit ovat maailmanlaajuisesti käytettävissä, kun taas pino-muistiin ei pääse muilla ketjuilla.
  • Pino-muistin hallinta tapahtuu a LIFO samalla kun se on monimutkaisempi kasan muistissa, koska sitä käytetään maailmanlaajuisesti. Kasan muisti on jaettu Nuori sukupolvi, vanha sukupolvi jne., lisätietoja Java Garbage Collection -sivustolta.
  • Pino muisti on lyhytaikainen kun kasan muisti elää sovelluksen suorittamisen alusta loppuun.
  • Voimme käyttää -XMX ja -XMS JVM-vaihtoehto määrittää kasan muistin aloituskoko ja enimmäiskoko. Voimme käyttää -XSS määrittää pinon muistikoko.
  • Kun pino muisti on täynnä, Java ajonaikainen heittää java.lang.StackOverFlowError Jos kasan muisti on täynnä, se heittää java.lang.OutOfMemoryError: Java-kasan tilavirhe.
  • Pino muistin koko on hyvin pieni verrattuna kasaan muistiin. Muistin allokoinnin yksinkertaisuuden vuoksi (LIFO), pino muisti on erittäin nopea verrattunakasan muisti.

Vertailukaavio

PARAMETRI PINO PINO
Perus Muisti varataan vierekkäisessä lohkossaMuisti varataan satunnaisessa järjestyksessä
Jakaminen ja jakaminen Automaattinen kääntäjän toimestaOhjelmoijan käsikirja
Kustannus VähemmänLisää
Toteutus KovaHelppo
Kirjautumisaika NopeamminHitaammin
Pääongelma Muistin puuteMuistin pirstaloituminen
Ero sijainti ErinomainenRiittävä
Joustavuus KiinteäkorkoinenKoon muuttaminen on mahdollista

Tämän avulla olemme saaneet tämän 'Muistin jakaminen Java-ohjelmassa' -oppaan loppuun. Toivon, että olet ymmärtänyt konseptin ja sen toteutuksen reaaliaikaisten esimerkkien avulla.

Nyt kun olet ymmärtänytMuistin allokointi Java-sovelluksessaTämän 'Muistin allokointi Javassa' -artikkelin avulla voit tutustua Edureka, luotettava verkko-oppimisyritys, jolla on yli 250 000 tyytyväisen oppijan verkosto, joka levisi ympäri maailmaa. Edurekan Java J2EE- ja SOA-koulutus- ja sertifiointikurssit on suunniteltu opiskelijoille ja ammattilaisille, jotka haluavat olla Java-kehittäjiä. Kurssi on suunniteltu antamaan sinulle etumatka Java-ohjelmointiin ja kouluttamaan sekä ydin- että edistyneitä Java-konsepteja sekä erilaisia ​​Java-kehyksiä, kuten Hibernate & kevät .

Onko sinulla kysymys meille? Mainitse se tämän 'Muistin allokointi Java-blogissa' kommenttiosassa, niin otamme sinuun yhteyttä mahdollisimman pian.