U Javi, upravljanje memorijom vitalan je proces. Njime automatski upravlja Java. JVM dijeli memoriju na dva dijela: stog memorija i heap memorija. Iz perspektive Jave, oba su važna memorijska područja, ali se oba koriste u različite svrhe. The glavna razlika između Stack memorije i heap memorije je da se stog koristi za pohranjivanje redoslijeda izvođenja metoda i lokalnih varijabli dok heap memorija pohranjuje objekte i koristi dinamičku dodjelu i oslobađanje memorije. U ovom odjeljku ćemo detaljno raspravljati o razlikama između hrpe i hrpe.
Stack Memory
Memorija steka je fizički prostor (u RAM-u) dodijeljen svakoj niti tijekom izvođenja. Nastaje kada se stvori nit. Upravljanje memorijom u stogu slijedi LIFO (Last-In-First-Out) redoslijed jer je dostupno globalno. Pohranjuje varijable, reference na objekte i djelomične rezultate. Memorija dodijeljena snopu života dok se funkcija ne vrati. Ako nema prostora za stvaranje novih objekata, baca sejava.lang.StackOverFlowError. Opseg elemenata ograničen je na njihove niti. The JVM stvara zaseban stog za svaku nit.
Heap memorija
Stvara se kada se JVM pokrene i koristi ga aplikacija sve dok aplikacija radi. Pohranjuje objekte i JRE klase. Kad god stvaramo objekte, oni zauzimaju prostor u memoriji gomile dok se referenca tog objekta stvara u stogu. Ne slijedi nikakav redoslijed kao stog. Dinamički obrađuje memorijske blokove. To znači da ne moramo ručno rukovati memorijom. Za automatsko upravljanje memorijom, Java pruža skupljač smeća koji briše objekte koji se više ne koriste. Memorija dodijeljena gomili živi sve dok se ne dogodi nijedan događaj, bilo da je program prekinut ili da je memorija slobodna. Elementi su globalno dostupni u aplikaciji. To je zajednički memorijski prostor koji se dijeli sa svim nitima. Ako je prostor hrpe pun, baca sejava.lang.OutOfMemoryError. Memorija hrpe dalje je podijeljena na sljedeća memorijska područja:
- Mlada generacija
- Prostor za preživjele
- Stara generacija
- Stalna generacija
- Predmemorija koda
Sljedeća slika prikazuje dodjelu memorije steka i prostora gomile.
Razlika između memorije hrpe i hrpe
Sljedeća tablica sažima sve glavne razlike između stack memorije i heap prostora.
Parametar | Stack Memory | Prostor gomile |
---|---|---|
Primjena | Pohranjuje predmete koji imaju vrlo kratak vijek trajanja kao npr metode, varijable, i referentne varijable od objekata. | Pohranjuje objekti i Java Runtime Environment ( JRE ) klase. |
Naručivanje | Slijedi LIFO narudžba. | Ne slijedi nikakav redoslijed jer se radi o dinamičkoj dodjeli memorije i nema nikakav fiksni obrazac za dodjelu i poništavanje memorijskih blokova. |
Fleksibilnost | to je nije fleksibilan jer ne možemo mijenjati dodijeljenu memoriju. | to je fleksibilno jer možemo mijenjati dodijeljenu memoriju. |
Učinkovitost | Ima brže pristup, dodjela i dealokacija. | Ima sporije pristup, dodjela i dealokacija. |
Veličina memorije | to je manji u veličini. | to je veći u veličini. |
Korištene Java opcije | Veličinu stoga možemo povećati korištenjem JVM opcije -Xss. | Možemo povećati ili smanjiti veličinu heap memorije korištenjem - Xmx i -Xms JVM opcija. |
Vidljivost ili opseg | Varijable su vidljive samo vlasniku niti. | Vidljivo je svim nitima. |
Generacija prostora | Kada se stvori nit, operativni sustav automatski dodjeljuje stog. | Da bi se stvorio prostor hrpe za aplikaciju, jezik prvo poziva operativni sustav tijekom izvođenja. |
Distribucija | Za svaki objekt kreira se zaseban stog. | Dijeli se među svim nitima. |
Bacanja izuzetaka | JVM baca java.lang.StackOverFlowError ako je veličina stoga veća od ograničenja. Da biste izbjegli ovu pogrešku, povećajte veličinu stoga. | JVM baca java.lang.OutOfMemoryError ako JVM ne može stvoriti novu izvornu metodu. |
Dodjela/ Dealokacija | To automatski radi sastavljač . | To se radi ručno od strane programer . |
trošak | Njegov trošak je manje . | Njegov trošak je više u usporedbi sa stogom. |
Provedba | Njegova provedba je teško . | Njegova provedba je lako . |
Redoslijed dodjele | Raspodjela memorije je stalan . | Memorija dodijeljena u slučajan narudžba. |
Sigurnost niti | Siguran je za niti jer svaka nit ima svoj vlastiti stog. | Nije siguran za niti, pa je potrebna ispravna sinkronizacija koda. |