logo

Stack Vs Heap Java

V Javi, upravljanje pomnilnika je pomemben proces. Samodejno ga upravlja Java. JVM deli pomnilnik na dva dela: kup pomnilnik in kopični pomnilnik. Z vidika Jave sta obe pomembni pomnilniški področji, vendar se obe uporabljata za različne namene. The velika razlika med pomnilnikom sklada in pomnilnikom kopice je, da se sklad uporablja za shranjevanje vrstnega reda izvajanja metode in lokalnih spremenljivk, medtem ko pomnilnik kopice shranjuje objekte in uporablja dinamično dodeljevanje in sprostitev pomnilnika. V tem razdelku bomo podrobno razpravljali o razlikah med skladom in kopico.

Stack Vs Heap Java

Stack Memory

Pomnilnik sklada je fizični prostor (v RAM-u), dodeljen vsaki niti med izvajanjem. Ustvari se, ko se ustvari nit. Upravljanje pomnilnika v skladu sledi vrstnemu redu LIFO (Last-In-First-Out), ker je dostopno globalno. Shranjuje spremenljivke, sklice na objekte in delne rezultate. Pomnilnik, dodeljen za zlaganje življenj, dokler se funkcija ne vrne. Če ni prostora za ustvarjanje novih predmetov, vržejava.lang.StackOverFlowError. Obseg elementov je omejen na njihove niti. The JVM ustvari ločen sklad za vsako nit.

Pomnilnik kopice

Ustvari se, ko se JVM zažene in uporablja aplikacija, dokler aplikacija teče. Shranjuje objekte in razrede JRE. Kadar koli ustvarimo objekte, le-ti zasedejo prostor v pomnilniku kopice, medtem ko referenca tega predmeta ustvari v skladu. Ne sledi nobenemu vrstnemu redu kot sklad. Dinamično obravnava pomnilniške bloke. To pomeni, da nam ni treba ročno ravnati s pomnilnikom. Za samodejno upravljanje pomnilnika Java ponuja zbiralnik smeti, ki izbriše objekte, ki niso več v uporabi. Pomnilnik, dodeljen kopici, živi, ​​dokler se ne zgodi noben dogodek, bodisi prekinjen program ali sprostitev pomnilnika. Elementi so globalno dostopni v aplikaciji. To je skupni pomnilniški prostor, ki ga delijo vse niti. Če je prostor kopice poln, vržejava.lang.OutOfMemoryError. Pomnilnik kopice je nadalje razdeljen na naslednja pomnilniška področja:

  • Mlada generacija
  • Prostor za preživele
  • Stara generacija
  • Stalna generacija
  • Predpomnilnik kode

Naslednja slika prikazuje dodelitev pomnilnika sklada in prostora kopice.

Stack Vs Heap Java

Razlika med pomnilnikom sklada in kopice

Naslednja tabela povzema vse glavne razlike med pomnilnikom sklada in prostorom kopice.

Parameter Stack Memory Heap Space
Aplikacija Shranjuje predmete, ki imajo zelo kratko življenjsko dobo, kot npr metode, spremenljivke, in referenčne spremenljivke predmetov. Shranjuje predmetov in Java Runtime Environment ( JRE ) razrede.
Naročanje Sledi LIFO naročilo. Ne sledi nobenemu vrstnemu redu, ker je dinamična dodelitev pomnilnika in nima nobenega fiksnega vzorca za dodelitev in sprostitev pomnilniških blokov.
Prilagodljivost je ni prilagodljiv ker ne moremo spremeniti dodeljenega pomnilnika. je prilagodljiva ker lahko spremenimo dodeljeni pomnilnik.
Učinkovitost Ima hitreje dostop, dodelitev in sprostitev. Ima počasnejši dostop, dodelitev in sprostitev.
Velikost pomnilnika je manjši v velikosti. je večji v velikosti.
Uporabljene možnosti Java Velikost sklada lahko povečamo z uporabo možnosti JVM -Xss. Velikost pomnilnika kopice lahko povečamo ali zmanjšamo z možnostma - Xmx in -Xms JVM.
Vidnost ali obseg Spremenljivke so vidne samo lastnikovi niti. Vidno je vsem nitim.
Generacija prostora Ko je nit ustvarjena, operacijski sistem samodejno dodeli sklad. Za ustvarjanje prostora kopice za aplikacijo jezik med izvajanjem najprej pokliče operacijski sistem.
Distribucija Za vsak objekt se ustvari ločen sklad. Deli se med vse niti.
Izjemni meti JVM vrže java.lang.StackOverFlowError če je velikost sklada večja od omejitve. Da bi se izognili tej napaki, povečajte velikost sklada. JVM vrže java.lang.OutOfMemoryError če JVM ne more ustvariti nove izvorne metode.
Dodelitev/ Dealokacija To stori samodejno prevajalnik . Izvaja se ročno s strani programer .
Stroški Njegov strošek je manj . Njegov strošek je več v primerjavi s skladom.
Izvedba Njeno izvajanje je težko . Njeno izvajanje je enostavno .
Vrstni red dodelitve Dodelitev pomnilnika je neprekinjeno . Pomnilnik dodeljen v naključen naročilo.
Varnost niti Nitno varen je, ker ima vsaka nit svoj sklad. Ni varen za niti, zato je potrebna pravilna sinhronizacija kode.