Kaj je dodeljevanje pomnilnika v Javi? Pomnilnik skladov in kopice



Ta članek, ki temelji na 'Dodeljevanju pomnilnika v Javi', vam bo pomagal pri natančnem poznavanju dodeljevanja pomnilnika skupaj s podatkovnimi strukturami sklada in kopice.

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 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



memory-allocation-in-java

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 blokuPomnilnik je dodeljen v naključnem vrstnem redu
Dodelitev in prerazporeditev Samodejno s prevajalnikomPriročnik programerja
Stroški ManjVeč
Izvajanje TežkoEnostavno
Čas dostopa HitrejePočasneje
Glavno vprašanje Pomanjkanje spominaFragmentacija spomina
Kraj razlike OdličnoUstrezno
Prilagodljivost Fiksna stopnjaSpreminjanje 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.