Dodelitev pomnilnika je postopek, s katerim se računalniški programi in storitve dodelijo fizičnim ali virtualnim spomin vesolja. V tem članku bomo izvedeli več o dodeljevanju pomnilnika v in razpravljali bomo o Stack and Heap Memory.
- Kaj je Stack Memory
- Ključne lastnosti pomnilnika skladov
- Metode v razredu Stack
- Java koda za izvedbo sklada
- Prostor kopice v Javi
- Ključne značilnosti kopnega pomnilnika
- Razlika med prostorom kopice Java in pomnilnikom skladov
- Primerjalna tabela
Kaj je pomnilnik skladov?
Pomnilnik Java Stack se uporablja za izvajanje niti. Vsebujejo kratkotrajne vrednosti, specifične za metodo, in sklice na druge predmete v kopici, na katero se usmerja metoda.
Stack pomnilnik je vedno naveden v LIFO (zadnji-prvi-prvi) naročilo. Vsakič, ko se prikliče metoda, se v pomnilniku sklada ustvari nov blok, v katerem metoda zadrži lokalne primitivne vrednosti in sklicevanje na druge predmete v metodi.
Takoj ko se metoda konča, blok postane neuporabljen in na voljo za naslednjo metodo.
Velikost pomnilnika skladov je v primerjavi s spominom kopice zelo manjša.
Ključne lastnosti pomnilnika skladov
Poleg tega, o čemer smo razpravljali do zdaj, je nekaj drugih značilnosti Stack spomin:
- Raste in se skrči, ko se pokličejo in vrnejo nove metode
- Spremenljivke znotraj sklada obstajajo le, dokler se izvaja metoda, ki jih je ustvarila
- To je samodejno dodeljena in sproščena, ko metoda zaključi izvajanje
- Če je ta pomnilnik poln, Java vrže java.lang.StackOverFlowError
- Dostop do tega pomnilnika je hitro v primerjavi s pomnilnikom kopice
- Ta spomin je brez navojev saj vsaka nit deluje v svojem skladu
Metode v razredu Stack
- Potiskanje predmeta ( Predmetni element ): Potisne element na vrh sklada.
- Predmet pop (): Odstrani in vrne zgornji element sklada. An ‘EmptyStackException’ izjema se vrže, če pokličemo pop (), ko je poklicni sklad prazen.
- Pogled predmeta (): Vrne element na vrhu sklada, vendar ga ne odstrani.
- Logično prazno (): Vrne se, če nič ni na vrhu sklada. V nasprotnem primeru vrne false.
- int iskanje ( Predmetni element ): Določa, ali objekt obstaja v skladišču. Če je element najden, vrne položaj elementa z vrha sklada. V nasprotnem primeru vrne -1.
Java koda za izvedbo sklada
import java.io. * import java.util. * Test razreda {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) } }
// Izhod
Zdaj pa pojdimo v Heap Space.
Prostor kopice v Javi
Pomnilnik se dodeli med izvajanjem navodil, ki jih napišejo programerji. Upoštevajte, da ime ime nima nič skupnega s strukturo podatkov kopice. Imenuje se kopica, ker gre za kup pomnilniškega prostora, ki je na voljo programerjem dodeljena in odstrani. Če programer s tem pomnilnikom ne ravna dobro, lahko pride do puščanja pomnilnikazgodijo v programu.
Ključne značilnosti Java Heap Memory
- Poleg tega, o čemer smo razpravljali do zdaj, je nekaj drugih značilnosti prostora kopice:
- Do njega lahko dostopate s pomočjo zapletenih tehnik upravljanja pomnilnika, ki vključujejo Mlada generacija, stara ali Tenured Generation, in Stalna generacija
- Če je prostor kopice poln, Java vrže java.lang.OutOfMemoryError
- Dostop do tega pomnilnika je razmeroma počasnejši od pomnilnika skladov
- Ta pomnilnik v nasprotju s skladom ni samodejno odstranjen. Potrebuje Zbiralec smeti da sprostite neuporabljene predmete, da ohranite učinkovitost uporabe pomnilnika
- Za razliko od sklada kup ni brez navojev in ga je treba varovati s pravilno sinhronizacijo kode
Razlika med prostorom kopice Java in pomnilnikom skladov
Na podlagi zgornjih razlag lahko zlahka ugotovimo naslednje razlike med Kup in Stack spomin.
__init__ python
- Kup pomnilnik uporabljajo vsi deli aplikacije, medtem ko pomnilnik sklada uporablja samo ena izvedbena nit.
- Vsakič, ko je objekt ustvarjen, je vedno shranjen v prostoru kopice in pomnilnik sklada vsebuje sklic nanj. Pomnilnik skladov vsebuje samo lokalne primitivne spremenljivke in referenčne spremenljivke na predmete v prostoru kupa.
- Predmeti, shranjeni na kopici, so globalno dostopni, druge niti pa do pomnilnika skladov ne morejo dostopati.
- Upravljanje pomnilnika v skladu poteka v a LIFO medtem ko je v Heap spominu bolj zapleten, ker se uporablja globalno. Kupovski spomin je razdeljen na Mlada generacija, stara generacija itd., več podrobnosti o Zbiranju smeti Java.
- Stack pomnilnik je kratkotrajna ker kopica pomnilnika živi od začetka do konca izvajanja aplikacije.
- Lahko uporabimo -XMX in -XMS Možnost JVM za določitev zagonske velikosti in največje velikosti kopice pomnilnika. Lahko uporabimo -XSS , da določite velikost pomnilnika sklada.
- Ko je pomnilnik sklada poln, izvrši Java java.lang.StackOverFlowError ker je, če je pomnilnik kopice poln, vrže java.lang.OutOfMemoryError: Prostor Java Javanapaka.
- Velikost pomnilnika skladov je v primerjavi s spominom kopice zelo manjša. Zaradi enostavnosti pri dodeljevanju pomnilnika (LIFO), pomnilnik skladov je v primerjavi zkup spomin.
Primerjalna tabela
PARAMETER | ZLOG | KUPA |
Osnovno | Pomnilnik je dodeljen v sosednjem bloku | Pomnilnik je dodeljen v naključnem vrstnem redu |
Dodelitev in prerazporeditev | Samodejno s prevajalnikom | Priročnik programerja |
Stroški | Manj | Več |
Izvajanje | Težko | Enostavno |
Čas dostopa | Hitreje | Počasneje |
Glavno vprašanje | Pomanjkanje spomina | Fragmentacija spomina |
Kraj razlike | Odlično | Ustrezno |
Prilagodljivost | Fiksna stopnja | Spreminjanje velikosti je možno |
S tem smo prišli do konca te vadnice 'Dodeljevanje spomina v Javi'. Upam, da ste koncept in njegovo izvedbo razumeli na nekaterih primerih v realnem času.
Zdaj, ko ste razumeliDodelitev pomnilnika v Javiosnove v tem članku 'Dodelitev pomnilnika v Javi' si oglejte Edureka, zaupanja vredno podjetje za spletno učenje z mrežo več kot 250.000 zadovoljnih učencev, ki se širijo po vsem svetu. Edurekini tečaji za usposabljanje in certificiranje Java J2EE in SOA so namenjeni študentom in strokovnjakom, ki želijo biti razvijalec Java. Tečaj je zasnovan tako, da vam omogoči uvod v programiranje Java in vas usposobi za osnovne in napredne koncepte Java, skupaj z različnimi Java okviri, kot so Hibernate & Pomlad .
Imate vprašanje za nas? Omenite ga v oddelku za komentarje tega spletnega dnevnika »Dodelitev pomnilnika v Javi« in v najkrajšem možnem času se vam bomo oglasili.