logo

Pino vs Heap Java

Javassa, muistin hallinta on elintärkeä prosessi. Java hallitsee sitä automaattisesti. JVM jakaa muistin kahteen osaan: pino muisti ja kasamuisti. Javan näkökulmasta molemmat ovat tärkeitä muistialueita, mutta molempia käytetään eri tarkoituksiin. The suuri ero pinomuistin ja pinomuistin välillä on, että pinoa käytetään tallentamaan menetelmän suoritusjärjestys ja paikalliset muuttujat, kun taas kasamuisti tallentaa objektit ja se käyttää dynaamista muistin varausta ja purkamista. Tässä osiossa keskustelemme pinon ja kasan eroista yksityiskohtaisesti.

Pino vs Heap Java

Pino muisti

Pinomuisti on fyysinen tila (RAM-muistissa), joka on varattu kullekin säikeelle ajon aikana. Se luodaan, kun lanka luodaan. Pinon muistinhallinta noudattaa LIFO-järjestystä (Last-In-First-Out), koska se on käytettävissä maailmanlaajuisesti. Se tallentaa muuttujat, viittaukset objekteihin ja osittaiset tulokset. Muistia on varattu pinoa varten, kunnes funktio palaa. Jos uusien objektien luomiseen ei ole tilaa, se heittääjava.lang.StackOverFlowError. Elementtien laajuus on rajoitettu niiden säikeisiin. The JVM luo erillisen pinon jokaiselle säikeelle.

Kasan muisti

Se luodaan, kun JVM käynnistyy, ja sovellus käyttää sitä niin kauan kuin sovellus on käynnissä. Se tallentaa esineitä ja JRE-luokkia. Aina kun luomme objekteja, se vie tilaa keon muistissa, kun taas objektin viittaus luo pinoon. Se ei noudata mitään järjestystä kuten pino. Se käsittelee dynaamisesti muistilohkoja. Se tarkoittaa, että meidän ei tarvitse käsitellä muistia manuaalisesti. Muistin automaattista hallintaa varten Java tarjoaa roskakeräimen, joka poistaa kohteet, joita ei enää käytetä. Muisti, joka on varattu kasaan, elää, kunnes mitään tapahtumaa, joko ohjelman päättymistä tai muistia vapaata, ei tapahdu. Elementit ovat maailmanlaajuisesti saatavilla sovelluksessa. Se on yhteinen muistitila, joka on jaettu kaikkien säikeiden kanssa. Jos kasatila on täynnä, se heittääjava.lang.OutOfMemoryError. Keon muisti on edelleen jaettu seuraaviin muistialueisiin:

  • Nuori sukupolvi
  • Selviytymistila
  • Vanha sukupolvi
  • Pysyvä sukupolvi
  • Koodivälimuisti

Seuraava kuva näyttää pinomuistin ja kasatilan varauksen.

Pino vs Heap Java

Ero pinon ja keon muistin välillä

Seuraavassa taulukossa on yhteenveto kaikista tärkeimmistä eroista pinomuistin ja pinotilan välillä.

Parametri Pino muisti Kasa tilaa
Sovellus Se varastoi tavaroita, joilla on erittäin lyhyt käyttöikä, kuten menetelmät, muuttujat, ja viitemuuttujia kohteista. Se tallentaa esineitä ja Java Runtime Environment ( JRE ) luokat.
Tilaus Se seuraa LIFO Tilaus. Se ei noudata mitään järjestystä, koska se on dynaaminen muistin varaus, eikä sillä ole kiinteää kaavaa muistilohkojen varaamiseen ja purkamiseen.
Joustavuus se on ei joustava koska emme voi muuttaa varattua muistia. se on joustava koska voimme muuttaa varattua muistia.
Tehokkuus Sillä on nopeammin pääsy, allokointi ja jakaminen. Sillä on hitaammin pääsy, allokointi ja jakaminen.
Muistin koko se on pienempi kooltaan. se on suurempi kooltaan.
Käytetyt Java-asetukset Voimme kasvattaa pinon kokoa käyttämällä JVM-optiota -Xss. Voimme suurentaa tai pienentää keon muistin kokoa käyttämällä - Xmx ja -Xms JVM vaihtoehtoja.
Näkyvyys tai laajuus Muuttujat näkyvät vain omistajaketjulle. Se näkyy kaikille säikeille.
Avaruuden sukupolvi Kun säie luodaan, käyttöjärjestelmä varaa pinon automaattisesti. Kasatilan luomiseksi sovellukselle kieli kutsuu ensin käyttöjärjestelmää ajon aikana.
Jakelu Jokaiselle objektille luodaan erillinen pino. Se jaetaan kaikkien lankojen kesken.
Poikkeusheitot JVM heittää java.lang.StackOverFlowError jos pinon koko on suurempi kuin raja. Vältä tämä virhe lisäämällä pinon kokoa. JVM heittää java.lang.OutOfMemoryError jos JVM ei pysty luomaan uutta alkuperäistä menetelmää.
Jakaminen / jakaminen Sen tekee automaattisesti kääntäjä . Sen tekee manuaalisesti ohjelmoija .
Kustannus Sen hinta on Vähemmän . Sen hinta on lisää pinoon verrattuna.
Toteutus Sen toteutus on kovaa . Sen toteutus on helppo .
Jakojärjestys Muistin varaus on jatkuva . Muisti varattu sisään satunnainen Tilaus.
Lanka-turvallisuus Se on lankaturvallinen, koska jokaisella langalla on oma pino. Se ei ole lankaturvallinen, joten koodin oikea synkronointi vaaditaan.