Što je dodjela memorije u Javi? Memorija stoga i hrpe



Ovaj članak zasnovan na 'Dodjeljivanju memorije u Javi' pomoći će vam s detaljnim znanjem o dodjeli memorije zajedno sa stack i heap podatkovnim strukturama.

Dodjela memorije je postupak kojim se računalni programi i usluge dodjeljuju fizičkim ili virtualnim memorija prostor. U ovom ćemo članku naučiti o dodjeli memorije u i razgovarat ćemo o memoriji stoga i hrpe.

Što je memorija stoga?

Java Stack memorija koristi se za izvršavanje niti. Sadrže kratkotrajne vrijednosti specifične za metodu i reference na druge objekte u hrpi koja se upućuje iz metode.





Stog memorija se uvijek upućuje na LIFO (zadnji-prvi-izašao) narudžba. Kad god se metoda pozove, u memoriji steka kreira se novi blok za metodu koja sadrži lokalne primitivne vrijednosti i referencu na druge objekte u metodi.

Čim metoda završi, blok postaje neiskorišten i postaje dostupan za sljedeću metodu.



kako proći referencom u javi

Veličina složene memorije vrlo je manja u usporedbi s memorijskom hrpom.

Ključne značajke memorije stoga

Osim onoga o čemu smo do sada razgovarali, slijede i neke druge značajke Stog memorija:

  • Raste i smanjuje se kad se nove metode pozivaju i vraćaju
  • Varijable unutar stoga postoje samo dok je pokrenuta metoda koja ih je stvorila
  • To je automatski dodijeljen i oslobođen kada metoda završi izvršenje
  • Ako je ova memorija puna, Java baca java.lang.StackOverFlowError
  • Pristup ovoj memoriji je brzo u usporedbi s hrpom memorije
  • Ovo sjećanje je bez niti jer svaka nit djeluje u svom stogu

Metode u klasi Stack

  • Pritisak objekta ( Element objekta ): Gura element na vrh stoga.
  • Iskakanje predmeta (): Uklanja i vraća gornji element stoga. An ‘EmptyStackException’ izuzetak se izbacuje ako pozivamo pop () kad je stek pozivanja prazan.
  • Pogled objekta (): Vraća element na vrhu stoga, ali ga ne uklanja.
  • Boolean empty (): Vraća se istinito ako ništa nije na vrhu stoga. Inače, vraća lažno.
  • int pretraga ( Element objekta ): Određuje postoji li objekt u stogu. Ako je element pronađen, vraća položaj elementa s vrha stoga. Inače, vraća -1.

Java kôd za implementaciju stoga

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

//Izlaz



memory-allocation-in-java

Sada, krenimo u prostor hrpe.

Prostor hrpe u Javi

Memorija se dodjeljuje tijekom izvršavanja uputa koje su napisali programeri. Imajte na umu da gomila naziva nema nikakve veze sa strukturom podataka gomile. Zove se hrpa jer je to hrpa memorijskog prostora dostupnog programerima dodijeljena i odvojiti. Ako programer ne radi dobro s ovom memorijom, može doći do curenja memorijedogoditi se u programu.

Ključne značajke Java Heap memorije

  • Osim onoga što smo do sada razgovarali, slijede još neke značajke prostora hrpe:
  • Pristup mu je putem složenih tehnika upravljanja memorijom koje uključuju Mlada generacija, stara ili Tenured Generation, i Trajna generacija
  • Ako je prostor hrpe pun, Java baca java.lang.OutOfMemoryError
  • Pristup ovoj memoriji relativno je sporiji od stog memorije
  • Ova se memorija, za razliku od stoga, ne uklanja automatski. Treba Sakupljač smeća kako bi se oslobodili neiskorišteni predmeti kako bi se zadržala učinkovitost upotrebe memorije
  • Za razliku od hrpe, hrpa to nije bez niti i treba ga čuvati pravilnom sinkronizacijom koda

Razlika između Java Heap prostora i memorije steka

Na temelju gornjih objašnjenja možemo lako zaključiti sljedeće razlike između Hrpa i Stog memorija.

  • Hrpa memoriju koriste svi dijelovi aplikacije dok memoriju stoga koristi samo jedna nit izvršenja.
  • Kad god se objekt stvori, uvijek se pohranjuje u prostor Heap, a memorija stoga sadrži referencu na njega. Stack memorija sadrži samo lokalne primitivne varijable i referentne varijable objektima u hrpi prostora.
  • Objekti pohranjeni u hrpi globalno su dostupni, dok memoriji stoga ne mogu pristupiti druge niti.
  • Upravljanje memorijom u stogu vrši se u a LIFO način dok je složeniji u Heap memoriji jer se koristi globalno. Memorija hrpe dijeli se na Mlada generacija, Stara generacija itd., više detalja u Javnom sakupljanju smeća.
  • Stack memorija je kratkotrajna dok hrpa memorije živi od početka do kraja izvršavanja aplikacije.
  • Možemo koristiti -XMX i -XMS JVM opcija za definiranje veličine pokretanja i maksimalne veličine hrpe memorije. Možemo koristiti -XSS za definiranje veličine memorije snopa.
  • Kad je memorija steka puna, Java runtime baca java.lang.StackOverFlowError dok je memorija hrpe puna, baca java.lang.OutOfMemoryError: Prostor Java hrpepogreška.
  • Veličina složene memorije vrlo je manja u usporedbi s Heap memorijom. Zbog jednostavnosti u dodjeli memorije (LIFO), memorija stoga je vrlo brza u usporedbi shrpa memorija.

Tablica usporedbe

PARAMETAR STOG HRPA
Osnovni, temeljni Memorija se dodjeljuje u susjedni blokMemorija se dodjeljuje slučajnim redoslijedom
Dodjela i preraspodjela Automatski kompajlerPriručnik programera
Trošak ManjeViše
Provedba TeškoLako
Vrijeme pristupa BržeSporije
Glavni problem Manjak memorijeFragmentacija memorije
Lokalitet razlike IzvrsnoAdekvatan
Fleksibilnost Fiksna stopaPromjena veličine je moguća

Ovim smo došli do kraja ovog vodiča „Dodjela memorije u Javi“. Nadam se da ste shvatili koncept i njegovu provedbu kroz neke primjere u stvarnom vremenu.

Sad kad ste shvatiliDodjela memorije u Javiosnove kroz ovaj članak 'Dodjela memorije u Javi' pogledajte Edureka, pouzdana tvrtka za internetsko učenje s mrežom od više od 250 000 zadovoljnih učenika raširenih širom svijeta. Edurekini tečajevi za obuku i certificiranje Java J2EE i SOA dizajnirani su za studente i profesionalce koji žele biti programer za Javu. Tečaj je dizajniran da vam pruži početnu prednost u Java programiranju i osposobi vas za osnovne i napredne Java koncepte zajedno s raznim Java okvirima poput Hibernate & Proljeće .

Imate pitanje za nas? Spomenite to u odjeljku za komentare ovog bloga 'Dodjela memorije na Javi', a mi ćemo vam se javiti u najkraćem mogućem roku.