Přidělení paměti je proces, kterým jsou počítačové programy a služby přiřazovány fyzickým nebo virtuálním Paměť prostor. V tomto článku se dozvíme o alokaci paměti v a probereme Stack and Heap Memory.
- Co je to Stack Memory
- Klíčové vlastnosti paměti zásobníku
- Metody ve třídě Stack
- Java kód pro implementaci zásobníku
- Haldy prostor v Javě
- Klíčové vlastnosti haldy paměti
- Rozdíl mezi Java Heap Space a Stack Memory
- Srovnávací graf
Co je to Stack Memory?
K provedení vlákna se používá paměť Java Stack. Obsahují hodnoty specifické pro metodu, které jsou krátkodobé, a odkazy na další objekty v haldě, která je získávána z metody.
Zásobník paměť je vždy odkazována v LIFO (Last-In-First-Out) objednat. Kdykoli je vyvolána metoda, vytvoří se v paměti zásobníku nový blok pro metodu, která bude obsahovat místní primitivní hodnoty a odkaz na jiné objekty v metodě.
Jakmile metoda skončí, blok přestane být používán a bude k dispozici pro další metodu.
Ve srovnání s hromadou paměti je velikost paměti zásobníku mnohem menší.
co se serializuje v Javě
Klíčové vlastnosti paměti zásobníku
Kromě toho, o čem jsme doposud diskutovali, následují některé další vlastnosti Zásobník Paměť:
- Roste a zmenšuje se, jak se volají a vracejí nové metody
- Proměnné uvnitř zásobníku existují, pouze pokud běží metoda, která je vytvořila
- Své automaticky přidělené a uvolněné, když metoda dokončí provádění
- Pokud je tato paměť plná, hodí se Java java.lang.StackOverFlowError
- Přístup do této paměti je rychle ve srovnání s haldy paměti
- Tato paměť je bezpečné pro vlákna protože každé vlákno pracuje ve svém vlastním zásobníku
Metody ve třídě Stack
- Zatlačení objektu ( Prvek objektu ): Zatlačí prvek na horní část zásobníku.
- Pop objektu (): Odebere a vrátí horní prvek zásobníku. An „EmptyStackException“ výjimka je vyvolána, pokud voláme pop (), když je vyvolávací zásobník prázdný.
- Prohlížení objektu (): Vrátí prvek v horní části zásobníku, ale neodstraní ho.
- Boolean prázdný (): Vrátí true, pokud v horní části zásobníku není nic. Jinak vrátí false.
- int vyhledávání ( Prvek objektu ): Určuje, zda objekt existuje v zásobníku. Pokud je prvek nalezen, vrátí jeho polohu z horní části zásobníku. Jinak vrátí -1.
Java kód pro implementaci zásobníku
import java.io. * import java.util. * třída Test {static void stack_push (stack stack) {for (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ýstup
Nyní se přesuňme do haldy.
Haldy prostor v Javě
Paměť je přidělena během provádění pokynů napsaných programátory. Všimněte si, že halda názvu nemá nic společného s datovou strukturou haldy. Nazývá se halda, protože je to hromada paměťového prostoru, který mají programátoři k dispozici přiděleno a zrušit přidělení. Pokud programátor tuto paměť nezpracovává dobře, může dojít k úniku pamětistane se v programu.
Klíčové vlastnosti paměti Java Heap
- Kromě toho, o čem jsme doposud diskutovali, následují některé další funkce haldy:
- Je přístupný prostřednictvím komplexních technik správy paměti, které zahrnují Mladá generace, stará nebo Generovaná osoba, a Stálá generace
- Pokud je halda plná, hodí se Java java.lang.OutOfMemoryError
- Přístup k této paměti je relativně pomalejší než paměť zásobníku
- Na rozdíl od zásobníku není tato paměť automaticky uvolněna. Potřebuje to Popelář uvolnit nepoužívané objekty tak, aby byla zachována efektivita využití paměti
- Na rozdíl od hromady hromada není bezpečné pro vlákna a je třeba jej chránit správnou synchronizací kódu
Rozdíl mezi Java Heap Space a Stack Memory
Na základě výše uvedených vysvětlení můžeme snadno uzavřít následující rozdíly Halda a Zásobník Paměť.
__init__ python
- Halda paměť je využívána všemi částmi aplikace, zatímco paměť zásobníku je využívána pouze jedním podprocesem provádění.
- Kdykoli je objekt vytvořen, je vždy uložen v prostoru haldy a paměť zásobníku obsahuje odkaz na něj. Paměť zásobníku obsahuje pouze lokální primitivní proměnné a referenční proměnné k objektům v haldě.
- Objekty uložené v haldě jsou globálně přístupné, zatímco do paměti zásobníku nelze získat přístup jinými vlákny.
- Správa paměti v zásobníku se provádí v a LIFO způsobem, zatímco v haldě je složitější, protože se používá globálně. Halda paměti je rozdělena na Mladá generace, stará generace atd., více podrobností na Java Garbage Collection.
- Paměť zásobníku je krátkodobý vzhledem k tomu, že paměť haldy žije od začátku do konce spuštění aplikace.
- Můžeme použít -XMX a -XMS Možnost JVM k určení spouštěcí velikosti a maximální velikosti haldy paměti. Můžeme použít -XSS definovat velikost paměti zásobníku.
- Když je paměť zásobníku plná, hodí se runtime Java java.lang.StackOverFlowError vzhledem k tomu, že pokud je halda plná, hodí se java.lang.OutOfMemoryError: Halda prostoru Javachyba.
- Velikost vyrovnávací paměti je ve srovnání s haldy mnohem menší. Z důvodu jednoduchosti alokace paměti (LIFO), paměť zásobníku je ve srovnání shalda paměti.
Srovnávací graf
PARAMETR | ZÁSOBNÍK | HALDA |
Základní | Paměť je přidělena v souvislém bloku | Paměť je alokována v náhodném pořadí |
Přidělování a přidělování | Automaticky kompilátorem | Ruční programátor |
Náklady | Méně | Více |
Implementace | Tvrdý | Snadný |
Čas přístupu | Rychlejší | Pomaleji |
Hlavní problém | Nedostatek paměti | Fragmentace paměti |
Lokalita rozdílu | Vynikající | Adekvátní |
Flexibilita | Pevná sazba | Změna velikosti je možná |
S tímto se dostáváme na konec tohoto výukového programu „Přidělení paměti v Javě“. Doufám, že jste pochopili koncept a jeho implementaci na několika příkladech v reálném čase.
Nyní, když jste to pochopiliPřidělení paměti v Javězáklady tohoto článku „Přidělení paměti v Javě“, podívejte se na Edureka, důvěryhodná online vzdělávací společnost se sítí více než 250 000 spokojených studentů rozložených po celém světě. Výukové a certifikační kurzy Edureka Java J2EE a SOA jsou určeny pro studenty a profesionály, kteří chtějí být vývojářem Java. Kurz je navržen tak, aby vám poskytl náskok v programování v Javě a naučil vás základní i pokročilé koncepty Javy spolu s různými rámci Java, jako je Hibernate & Jaro .
Máte na nás dotaz? Uveďte to v sekci komentářů v tomto blogu „Přidělení paměti v Javě“ a my se vám ozveme co nejdříve.