Pridelenie pamäte je proces, ktorým sa počítačovým programom a službám priraďujú fyzické alebo virtuálne Pamäť priestor. V tomto článku sa dozvieme o alokácii pamäte v a budeme diskutovať o Stack and Heap Memory.
- Čo je to Stack Memory
- Kľúčové vlastnosti zásobníka pamäte
- Metódy v triede Stack
- Java kód pre implementáciu zásobníka
- Halda priestoru v Jave
- Kľúčové vlastnosti haldy pamäte
- Rozdiel medzi Java Heap Space a Stack Memory
- Porovnávacia tabuľka
Čo je to Stack Memory?
Na vykonanie vlákna sa používa pamäť Java Stack. Obsahujú krátkodobé hodnoty špecifické pre metódu a odkazy na ďalšie objekty v halde, ktorá sa z metódy odkazuje.
Stoh pamäť je vždy uvedená v LIFO (Last-In-First-Out) objednať. Kedykoľvek je vyvolaná metóda, v zásobníku sa vytvorí nový blok pre metódu, ktorý bude obsahovať miestne primitívne hodnoty a odkazy na iné objekty v metóde.
Hneď ako metóda skončí, blok sa nepoužije a bude k dispozícii pre ďalšiu metódu.
Veľkosť stohovej pamäte je v porovnaní s haldy oveľa menšia.
ako zoradiť pole c ++
Kľúčové vlastnosti zásobníka pamäte
Okrem toho, o čom sme doteraz hovorili, nasleduje niekoľko ďalších funkcií Stoh Pamäť:
- Rastie a zmenšuje sa, keď sa volajú a vracajú nové metódy
- Premenné v zásobníku existujú iba dovtedy, kým je spustená metóda, ktorá ich vytvorila
- Je automaticky pridelené a pridelené, keď metóda dokončí vykonávanie
- Ak je táto pamäť plná, hodí sa Java java.lang.StackOverFlowError
- Prístup k tejto pamäti je rýchlo v porovnaní s hromadnou pamäťou
- Táto pamäť je bezpečné pre vlákna pretože každé vlákno pracuje vo svojom vlastnom zásobníku
Metódy v triede Stack
- Zatlačenie objektu ( Element objektu ): Potlačí prvok na hornú časť stohu.
- Pop objektu (): Odstráni a vráti horný prvok stohu. An „EmptyStackException“ výnimka je vyvolaná, ak voláme pop (), keď je vyvolávací zásobník prázdny.
- Nahliadnutie do objektu (): Vráti prvok v hornej časti stohu, ale neodstráni ho.
- Boolean prázdne (): Ak nič nie je na vrchu zásobníka, vráti sa hodnota true. Inak, vráti hodnotu false.
- int vyhľadávanie ( Element objektu ): Určuje, či objekt existuje v zásobníku. Ak sa prvok nájde, vráti jeho polohu z hornej časti stohu. Inak vráti -1.
Java kód pre implementáciu zásobníka
import java.io. * import java.util. * trieda Test {static void stack_push (zásobník zásobníka) {pre (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) } }
//Výkon
Poďme teraz do haldy.
Halda priestoru v Jave
Pamäť je pridelená počas vykonávania pokynov napísaných programátormi. Upozorňujeme, že názov haldy nemá nič spoločné s dátovou štruktúrou haldy. Nazýva sa to halda, pretože je to hromada pamäťového priestoru, ktorý majú programátori k dispozícii pridelené a zrušiť pridelenie. Ak programátor nespracuje túto pamäť dobre, môže dôjsť k úniku pamätesa stane v programe.
Kľúčové vlastnosti haldy pamäte Java
- Okrem toho, o čom sme doteraz hovorili, sú tu aj ďalšie vlastnosti haldy:
- Je prístupný pomocou komplexných techník správy pamäte, ktoré zahŕňajú Mladá generácia, stará alebo Generácia tenured, a Stála generácia
- Ak je halda plná, Java hodí java.lang.OutOfMemoryError
- Prístup k tejto pamäti je relatívne pomalší ako k zásobníku
- Na rozdiel od zásobníka nie je táto pamäť automaticky uvoľnená. Potrebuje to Smetiar uvoľniť nepoužívané objekty tak, aby bola zachovaná efektívnosť využitia pamäte
- Na rozdiel od hromady hromada nie je bezpečné pre vlákna a je potrebné ho strážiť správnou synchronizáciou kódu
Rozdiel medzi Java Heap Space a Stack Memory
Na základe vyššie uvedených vysvetlení môžeme ľahko uzavrieť nasledujúce rozdiely Halda a Stoh Pamäť.
čo je inštancia java
- Halda pamäť používajú všetky časti aplikácie, zatiaľ čo zásobníková pamäť je využívaná iba jedným vláknom vykonania.
- Vždy, keď je objekt vytvorený, je vždy uložený v halde a pamäť zásobníka obsahuje na ňu odkaz. Stohová pamäť obsahuje iba lokálne primitívne premenné a referenčné premenné na objekty v halde.
- Objekty uložené v halde sú globálne prístupné, zatiaľ čo do pamäte zásobníka nemôžu získať prístup iné vlákna.
- Správa pamäte v zásobníku sa vykonáva v a LIFO zatiaľ čo v halde je to zložitejšie, pretože sa používa globálne. Halda pamäte je rozdelená na Mladá generácia, Stará generácia atď., viac podrobností v zbierke Java Garbage Collection.
- Zásobníková pamäť je krátkodobý zatiaľ čo halda pamäť žije od začiatku do konca vykonávania aplikácie.
- Môžeme použiť -XMX a -XMS Možnosť JVM na definovanie veľkosti spustenia a maximálnej veľkosti haldy pamäte. Môžeme použiť -XSS definovať veľkosť pamäte zásobníka.
- Keď je pamäť zásobníka plná, hodí sa runtime Java java.lang.StackOverFlowError zatiaľ čo ak je halda pamäte plná, hodí sa java.lang.OutOfMemoryError: Hromadný priestor Javachyba.
- Skladovacia veľkosť pamäte je v porovnaní s haldy oveľa menšia. Z dôvodu jednoduchosti alokácie pamäte (LIFO), zásobníková pamäť je v porovnaní shalda pamäte.
Porovnávacia tabuľka
PARAMETR | STOH | HEAP |
Základné | Pamäť je pridelená v súvislom bloku | Pamäť je alokovaná v náhodnom poradí |
Prideľovanie a prideľovanie | Automaticky prekladačom | Príručka programátora |
Náklady | Menej | Viac |
Implementácia | Ťažko | Ľahké |
Prístupový čas | Rýchlejšie | Pomalšie |
Hlavný problém | Nedostatok pamäte | Fragmentácia pamäte |
Lokalita rozdielu | Vynikajúci | Adekvátne |
Flexibilita | Pevne stanovena sadzba | Zmena veľkosti je možná |
Týmto sa dostávame na koniec tohto výučby „Alokácia pamäte v Jave“. Dúfam, že ste pochopili koncept a jeho implementáciu na niekoľkých príkladoch v reálnom čase.
Teraz, keď ste to pochopiliAlokácia pamäte v Javezáklady tohto článku „Alokácia pamäte v Jave“ si pozrite autor: Edureka, dôveryhodná online vzdelávacia spoločnosť so sieťou viac ako 250 000 spokojných študentov rozmiestnených po celom svete. Výcvikové a certifikačné kurzy Edureka Java J2EE a SOA sú určené pre študentov a profesionálov, ktorí chcú byť Java Developerom. Kurz je navrhnutý tak, aby vám dal náskok v programovaní v Jave a naučil vás základné aj pokročilé koncepty Javy spolu s rôznymi Java frameworkmi ako Hibernate & Jar .
Máte na nás otázku? Uveďte to v sekcii komentárov v tomto blogu „Alokácia pamäte v Jave“ a my sa vám ozveme čo najskôr.