Čo je alokácia pamäte v Jave? Skladať a hromadiť pamäť



Tento článok založený na „Alokácii pamäte v Jave“ vám pomôže s podrobnými znalosťami o alokácii pamäte spolu s dátovými štruktúrami Stack a Heap.

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?

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



memory-allocation-in-java

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 blokuPamäť je alokovaná v náhodnom poradí
Prideľovanie a prideľovanie Automaticky prekladačomPríručka programátora
Náklady MenejViac
Implementácia ŤažkoĽahké
Prístupový čas RýchlejšiePomalšie
Hlavný problém Nedostatok pamäteFragmentácia pamäte
Lokalita rozdielu VynikajúciAdekvátne
Flexibilita Pevne stanovena sadzbaZmena 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.