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