Ce este Alocarea memoriei în Java? Memorie Stack and Heap



Acest articol bazat pe „Alocarea memoriei în Java” vă va ajuta cu cunoștințe detaliate despre alocarea memoriei împreună cu structurile de date Stack și Heap.

Alocare de memorie este un proces prin care programele și serviciile de computer sunt atribuite fizic sau virtual memorie spaţiu. În acest articol, vom afla despre alocarea memoriei în și vom discuta despre memoria Stack and Heap.

Ce este memoria Stack?

Memoria Java Stack este utilizată pentru executarea unui thread. Acestea conțin valori specifice metodei care sunt de scurtă durată și referințe la alte obiecte din grămada care se referă din metodă.





Grămadă memoria este întotdeauna menționată în LIFO (Last-In-First-Out) Ordin. Ori de câte ori este invocată o metodă, se creează un bloc nou în memoria stivei pentru ca metoda să dețină valorile primitive locale și referința la alte obiecte din metodă.

De îndată ce metoda se termină, blocul devine neutilizat și devine disponibil pentru următoarea metodă.



ce este un cititor tamponat

Dimensiunea memoriei stive este foarte mică în comparație cu memoria Heap.

Caracteristici cheie ale memoriei Stack

În afară de ceea ce am discutat până acum, următoarele sunt câteva alte caracteristici ale Grămadă memorie:

  • Crește și se micșorează pe măsură ce sunt apelate și returnate noi metode
  • Variabilele din stivă există numai atât timp cât se execută metoda care le-a creat
  • Este automat alocate și alocate când metoda termină execuția
  • Dacă această memorie este plină, Java aruncă java.lang.StackOverFlowError
  • Accesul la această memorie este rapid în comparație cu memoria heap
  • Această amintire este fir de siguranta deoarece fiecare fir operează în propria stivă

Metode în clasa Stack

  • Împingerea obiectului ( Element de obiect ): Împinge un element în partea de sus a stivei.
  • Obiect pop (): Elimină și returnează elementul de sus al stivei. Un „EmptyStackException” excepția este aruncată dacă apelăm pop () când stiva de invocare este goală.
  • Peek obiect (): Returnează elementul din partea de sus a stivei, dar nu îl elimină.
  • Boolean gol (): Revine adevărat dacă nu este nimic în partea de sus a stivei. Altfel, returnează fals.
  • int search ( Element de obiect ): Determină dacă există un obiect în stivă. Dacă elementul este găsit, acesta returnează poziția elementului din partea de sus a stivei. Altfel, returnează -1.

Cod Java pentru implementarea stivei

import java.io. * import java.util. * class 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) } } 

// Ieșire



memory-allocation-in-java

Acum, să ne mutăm în spațiul Heap.

Heap Space în Java

Memoria este alocată în timpul executării instrucțiunilor scrise de programatori. Rețineți că numele heap nu are nicio legătură cu structura de date heap. Se numește heap, deoarece este o grămadă de spațiu de memorie disponibil pentru programatori alocat și de-alocați. Dacă un programator nu gestionează bine această memorie, se poate scurge memoriase întâmplă în program.

Caracteristici cheie ale memoriei Java Heap

  • În afară de ceea ce am discutat până acum, sunt prezentate câteva alte caracteristici ale spațiului heap:
  • Se accesează prin tehnici complexe de gestionare a memoriei care includ Generație tânără, bătrână sau Generația permanentă, și Generație permanentă
  • Dacă spațiul heap este plin, Java aruncă java.lang.OutOfMemoryError
  • Accesul la această memorie este relativ mai lent decât memoria stivei
  • Această memorie, spre deosebire de stivă, nu este repartizată automat. Are nevoie Colector de gunoi pentru a elibera obiecte neutilizate, astfel încât să păstreze eficiența utilizării memoriei
  • Spre deosebire de stivă, o grămadă nu este fir de siguranta și trebuie protejat prin sincronizarea corectă a codului

Diferența dintre spațiul Java Heap și memoria stivă

Pe baza explicațiilor de mai sus, putem concluziona cu ușurință următoarele diferențe între Morman și Grămadă memorie.

  • Morman memoria este utilizată de toate părțile aplicației, în timp ce memoria stivă este utilizată doar de un fir de execuție.
  • Ori de câte ori este creat un obiect, acesta este întotdeauna stocat în spațiul Heap și memoria stivei conține referința la acesta. Memoria stivă conține doar variabile locale primitive și variabile de referință la obiectele din spațiul heap.
  • Obiectele stocate în heap sunt accesibile la nivel global, în timp ce memoria stivei nu poate fi accesată de alte fire.
  • Gestionarea memoriei în stivă se face într-un LIFO în timp ce este mai complex în memoria Heap, deoarece este utilizată la nivel global. Memoria grămadă este împărțită în Young-Generation, Old-Generation etc, mai multe detalii la Java Garbage Collection.
  • Memoria stivă este de scurtă durată întrucât memoria heap trăiește de la început până la sfârșitul execuției aplicației.
  • Putem folosi -XMX și -XMS Opțiune JVM pentru a defini dimensiunea de pornire și dimensiunea maximă a memoriei heap. Putem folosi -XSS pentru a defini dimensiunea memoriei stivei.
  • Când memoria stivei este plină, Java runtime lansează java.lang.StackOverFlowError întrucât dacă memoria heap este plină, aceasta aruncă java.lang.OutOfMemoryError: Java Heap Spaceeroare.
  • Dimensiunea memoriei stive este foarte mică în comparație cu memoria Heap. Datorită simplității în alocarea memoriei (LIFO), memoria stivă este foarte rapidă în comparație cumemorie grămadă.

Diagramă de comparație

PARAMETRU GRĂMADĂ MORMAN
De bază Memoria este alocată într-un bloc contiguMemoria este alocată într-o ordine aleatorie
Alocare și repartizare Automat de compilatorManual de programator
Cost Mai puținMai mult
Implementare GreuUşor
Timpul de acces Mai repedeMai lent
Problema principala Lipsa memorieiFragmentarea memoriei
Localitatea Diferenței ExcelentAdecvat
Flexibilitate Rata fixaRedimensionarea este posibilă

Cu aceasta, ajungem la sfârșitul acestui tutorial „Alocarea memoriei în Java”. Sper că ați înțeles conceptul și implementarea acestuia prin câteva exemple în timp real.

Acum că ai înțelesAlocarea memoriei în Javaelementele de bază din acest articol „Alocarea memoriei în Java” verificați de Edureka, o companie de învățare online de încredere, cu o rețea de peste 250.000 de elevi mulțumiți răspândiți pe tot globul. Cursurile de formare și certificare Java J2EE și SOA ale Edureka sunt concepute pentru studenți și profesioniști care doresc să fie dezvoltator Java. Cursul este conceput pentru a vă oferi un început avansat în programarea Java și pentru a vă instrui atât pentru conceptele Java de bază, cât și pentru cele avansate, împreună cu diverse cadre Java, cum ar fi Hibernate și Primăvară .

Ai o întrebare pentru noi? Menționați-l în secțiunea de comentarii a acestui blog „Alocarea memoriei în Java” și vă vom contacta cât mai curând posibil.