Rozdiel medzi Java Heap a Stack
Virtuálny stroj Java (JVM), ktorý vyhradzuje určitú pamäť z operačného systému, JVM používa túto pamäť na vytváranie objektov a inštancií a táto pamäť sa nazýva halda Java. Halda Java sa používa ako dynamická alokácia pamäte. Nachádza sa hlavne v dolnej časti adresy a odpadky sa zbierajú, keď sa veľkosť haldy naplní. Lokálne premenné, ktoré sa uložia, a vyvolanie metód sú prítomné v špecifikovanej pamäti, ktorá sa nazýva Stack. Pamäť zásobníka sa riadi pravidlom Last-In-First-Out (LIFO). Zásobník sa označuje ako pridelenie statickej pamäte. Veľkosť zásobníka pamäte je menšia v porovnaní s veľkosťou haldy pamäte.
Poďme študovať oveľa viac o Java Heap and Stack podrobne:
- Halda Java je rozdelená na dve hlavné časti, ktorými sú Young space a Old space. Mladý priestor je súčasťou pamäte haldy Java, ktorá je vyhradená alebo zabezpečená na ukladanie nových objektov. Keď sa tento priestor zaplní a bude platný určitý čas a teraz sa nepoužívajú, presunie sa do iných častí, ktoré sú starým priestorom a ktoré sú vyhradené na ukladanie starých objektov.
- V halde java je kolekcia odpadov procesom odstraňovania mŕtvych alebo nepoužívaných objektov, čo pomáha uvoľniť priestor z haldy a uvoľniť priestor pre nové objekty alebo inštancie.
- Kým sa metóda začína, potom sa jej rámec zásobníka umiestni na vrchol zásobníka hovorov. Rámec zásobníka udržuje stav metódy, ktorá má konkrétne riadky kódu, ktoré sa vykonávajú, a všetky miestne premenné. Aktuálna metóda behu stohu je vždy metóda, ktorá je na vrchu stohu.
- Blok bol vytvorený v zásobníku, keď je vyvolaná metóda na uchovávanie hodnôt a referencie objektov na metódy. Po vykonaní metódy sa blok už nepoužíva a uvoľní sa, čo môže byť k dispozícii pre ďalšiu metódu.
- Zásobník sa používa na vykonávanie vlákien. Každé vlákno má zásobník virtuálnych strojov Java a zásobník ukladá rámce JVM. Metódy sa prideľujú do zásobníkovej pamäte a prístup do pamäte je naozaj rýchly. Nemôžeme zmeniť balík virtuálnych strojov Java, dá sa to urobiť iba pomocou push a popu na zásobníku java. Zásobník Java sa zväčšuje a zmenšuje, ako to robia push a pop s lokálnymi premennými. JVM hrá svoju úlohu pri vyvolaní a vracaní metódy. Jednoducho povedané, Java Stack má ukladať metódy a premenné.
Porovnania medzi hlavami medzi haldy Java a stackom (infografika)
Nižšie je najlepších 7 porovnaní medzi Java Heap vs Stack
Kľúčový rozdiel medzi Java Heap a Stack
Niektoré body sú vysvetlené nižšie, ktoré ukazujú rozdiel medzi Java Heap a Stack
- Java Heap je časť pamäte, v ktorej môžu byť prvky uložené a odstránené v akomkoľvek poradí. V zásobníku sa prvky môžu ukladať a odstraňovať podľa pravidiel Last in First out (LIFO).
- Keď je Java Heap úplne obsadená, potom to vyhodí chybu pamäte alebo chybu haldy priestoru Java. Ak je obsadená pamäť zásobníka, vyvolá chybu pretečenia zásobníka.
- Pre Java Heap možno na definovanie počiatočnej a maximálnej veľkosti použiť voľbu java virtuálneho počítača Xms a Xmx . V prípade Java Stack možno na definovanie veľkosti pamäte zásobníka použiť Xss JVM.
- Po vytvorení nového objektu sa jednoducho uloží do pamäte haldy Java. Odkaz na nový objekt bol uložený v pamäti zásobníka.
- Hromadu Java je možné použiť, keď používateľ nemá predstavu o množstve údajov potrebných za behu. Zásobník možno použiť, keď používateľ presne vie, aké množstvo údajov je potrebné pred kompilovaním.
- V Heap neexistuje žiadna závislosť na prístupe k iným prvkom. K ľubovoľnému prvku je možné kedykoľvek pristupovať náhodne. V zásobníku sa nachádza konkrétny príkaz na prístup k prvku.
- Halda je zložitejšia, pretože niekedy nedokáže vedieť, či je pamäť obsadená alebo uvoľnená. V zásobníku je to jednoduché a ľahké.
Odporúčané kurzy
- Kurz štruktúr dát a algoritmov online
- Certifikačný kurz v oblasti správy defektov
- Online certifikačný kurz v programovaní škrupín na Cygwin
Tabuľka porovnania hromady javy a hromady
Nasleduje porovnávacia tabuľka medzi haldy Java a zásobníkmi
ZÁKLAD PRE
POROVNANIE | Java Heap | Stoh |
veľkosť | Veľkosť pamäte Java Heap je viac ako hromada. | Veľkosť zásobníka je v porovnaní s haldy Java menšia. |
výkon | Halda Java je pomalá. | Zásobník je veľmi rýchly v porovnaní s haldy java. |
život | Pamäť haldy Java má veľkú životnosť, od začiatku do konca aplikácie. | Zásobníková pamäť má kratšiu životnosť alebo krátku životnosť. |
Prístupný | Uložené objekty haldy Java sú prístupné globálne. | Objekty uložené v pamäti zásobníka nemôžu byť dostupné cez vlákna. |
prihláška | Pamäť haldy Java sa používa v každej časti aplikácie v čase jej vykonania. | Zásobníková pamäť použitá v častiach znamená jednu po druhej pri vykonávaní vlákna. |
špecifický | Halda Java je hlavne špecifická pre konkrétnu aplikáciu | Zásobník je určený hlavne pre vlákno. |
účinný | V haldy Java neexistuje efektívne využitie priestoru alebo pamäte. | V zásobníku sa priestor využíva efektívne. |
Záver - Java Heap vs Stack
Java Heap a Stack sú súčasťou správy pamäte pre systém. Pri navrhovaní a implementácii aplikácie hrá rozhodujúcu úlohu. Znalosť správy pamäte je potrebná pre jednotlivca predtým, ako začnete pracovať na živých projektoch. Vďaka tomu je vaša aplikácia rýchlejšia a ľahko spravovateľná.
Zásobník je skutočne dôležitý pri manipulácii s výnimkami a pri vykonávaní vlákien. Hodnoty zásobníka existujú hlavne v rámci metód alebo funkcií, v ktorých sú vytvorené, ak táto funkcia vracia akúkoľvek hodnotu alebo vykonaná blok zásobníka bol odstránený. Java ukladá do zásobníka iba primitívne lokálne premenné. Hlavný rozdiel medzi haldy Java a zásobníkom je životný cyklus hodnôt znamená, ako sú premenné alokované do pamäte a zlikvidované pre konkrétnu aplikáciu.
Odporúčaný článok
Bol to užitočný návod na rozdiel medzi haldy Java a stackom, kde sme diskutovali o ich význame, porovnaniach medzi hlavami, kľúčových rozdieloch a záveroch. Viac informácií nájdete aj v nasledujúcom článku -
- Čo by sme mali uprednostniť pri použití jazyka JavaScript alebo volaní
- Apache Nifi vs Apache Spark - užitočné porovnanie 9
- JavaScript vs Ruby - 7 Užitočné porovnanie
- 15 najlepších vecí, ktoré potrebujete vedieť o MapReduce vs Spark
- Java vs JavaScript - 8 užitočných rozdielov, ktoré sa treba naučiť