Hva er minnetildeling i Java? Stack og Heap Memory



Denne artikkelen basert på 'Memory Allocation in Java' vil hjelpe deg med detaljert kunnskap om minnetildeling sammen med Stack og Heap datastrukturer.

Minnetildeling er en prosess der dataprogrammer og tjenester tilordnes fysisk eller virtuelt hukommelse rom. I denne artikkelen skal vi lære om minnetildeling i og vi vil diskutere Stack og Heap Memory.

Hva er Stack Memory?

Java Stack-minne brukes til å utføre en tråd. De inneholder metodespesifikke verdier som er kortvarige og referanser til andre objekter i dyngen som blir henvist fra metoden.





Stable minne er alltid referert til LIFO (Last-In-First-Out) rekkefølge. Hver gang en metode påkalles, opprettes en ny blokk i stabelminnet for at metoden skal ha lokale primitive verdier og referanse til andre objekter i metoden.

Så snart metoden avsluttes, blir blokken ubrukt og blir tilgjengelig for neste metode.



hashmap og hashtable i java

Stakk minnestørrelse er veldig mindre sammenlignet med Heap-minne.

Nøkkelfunksjoner i Stack Memory

Bortsett fra det vi har diskutert så langt, er følgende noen andre funksjoner av Stable hukommelse:

  • Den vokser og krymper når henholdsvis nye metoder kalles og returneres
  • Variabler i stabelen eksisterer bare så lenge metoden som opprettet dem kjører
  • Det er automatisk tildelt og distribuert når metoden er ferdig med utførelsen
  • Hvis dette minnet er fullt, kaster Java java.lang.StackOverFlowError
  • Tilgang til dette minnet er fort sammenlignet med haugeminne
  • Dette minnet er trådsikker når hver tråd fungerer i sin egen stabel

Metoder i Stack-klasse

  • Objekt skyve ( Objektelement ): Skyver et element på toppen av bunken.
  • Objektpop (): Fjerner og returnerer toppelementet i stakken. An ‘EmptyStackException’ unntak kastes hvis vi kaller pop () når påkallingsstakken er tom.
  • Objekt titt (): Returnerer elementet på toppen av bunken, men fjerner det ikke.
  • Boolsk tom (): Det blir sant hvis ingenting er på toppen av bunken. Ellers, returnerer falsk.
  • int søk ( Objektelement ): Den avgjør om et objekt eksisterer i bunken. Hvis elementet blir funnet, returnerer det elementets posisjon fra toppen av bunken. Ellers returnerer den -1.

Java-kode for stackimplementering

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) } } 

//Produksjon



memory-allocation-in-java

La oss nå gå inn i Heap Space.

Heap Space i Java

Minnet tildeles under gjennomføring av instruksjoner skrevet av programmerere. Merk at navnet heap ikke har noe å gjøre med heap-datastrukturen. Det kalles heap fordi det er en haug med minne som er tilgjengelig for programmerere tildelt og avfordele. Hvis en programmerer ikke takler dette minnet bra, kan det hende en minnelekkasjeskje i programmet.

Viktige funksjoner i Java Heap Memory

  • Bortsett fra det vi har diskutert så langt, er det noen andre funksjoner i haugplass:
  • Det er tilgjengelig via komplekse minnestyringsteknikker som inkluderer Young Generation, Old eller Fast generasjon, og Permanent generasjon
  • Hvis haugplassen er full, kaster Java java.lang.OutOfMemoryError
  • Tilgangen til dette minnet er relativt tregere enn stakkminnet
  • Dette minnet, i motsetning til stabelen, blir ikke automatisk fordelt. Det trenger Søppelmann for å frigjøre ubrukte gjenstander for å opprettholde effektiviteten til minnebruk
  • I motsetning til stack, er det ikke en haug trådsikker og må beskyttes ved riktig synkronisering av koden

Forskjellen mellom Java Heap Space og Stack Memory

Basert på forklaringene ovenfor kan vi enkelt konkludere med følgende forskjeller mellom Haug og Stable hukommelse.

  • Haug minne brukes av alle delene av applikasjonen mens stackminne bare brukes av en tråd med utførelse.
  • Hver gang et objekt blir opprettet, lagres det alltid i Heap-rommet, og stackminnet inneholder referansen til det. Stackminne inneholder bare lokale primitive variabler og referansevariabler til gjenstander i haugplass.
  • Objekter som er lagret i dyngen er globalt tilgjengelige, mens stakkminne ikke er tilgjengelig fra andre tråder.
  • Minnehåndtering i stabelen gjøres i en LIFO måte mens det er mer komplekst i Heap-minne fordi det brukes globalt. Haugminne er delt inn i Ung generasjon, gammel generasjon etc, flere detaljer på Java Garbage Collection.
  • Stack minne er Kortlevd mens hukommelsesminne lever fra starten til slutten av programutførelsen.
  • Vi kan bruke -XMX og -XMS JVM-alternativ for å definere oppstartsstørrelse og maksimal størrelse på heapminne. Vi kan bruke -XSS for å definere stackminnestørrelsen.
  • Når stackminnet er fullt, kaster Java runtime java.lang.StackOverFlowError mens hvis hukommelsesminnet er fullt, kaster det java.lang.OutOfMemoryError: Java Heap Spacefeil.
  • Stakkminnestørrelsen er veldig mindre sammenlignet med Heap-minne. På grunn av enkelhet i minnetildeling (LIFO), stackminne er veldig raskt sammenlignet medhaugminne.

Sammenligningstabell

PARAMETER STABLE HEAP
Grunnleggende Minne tildeles i en sammenhengende blokkMinne tildeles i tilfeldig rekkefølge
Tildeling og omfordeling Automatisk av kompilatorManual av programmerer
Koste MindreMer
Gjennomføring HardLett
Tilgangstid RaskereTregere
Hoved problemet Mangel på minneMinne fragmentering
Forskjellets lokalitet UtmerketTilstrekkelig
Fleksibilitet Fast renteEndring av størrelse er mulig

Med dette kommer vi til en slutt på denne 'Memory Allocation in Java' -veiledningen. Jeg håper du har forstått konseptet og implementeringen gjennom noen sanntidseksempler.

Nå som du har forstått detMinnetildeling i Javagrunnleggende gjennom denne 'Memory Allocation in Java' artikkelen, sjekk ut av Edureka, et pålitelig online læringsfirma med et nettverk av mer enn 250 000 fornøyde elever spredt over hele verden. Edurekas Java J2EE- og SOA-opplæring og sertifiseringskurs er designet for studenter og fagpersoner som ønsker å være Java-utvikler. Kurset er designet for å gi deg et forsprang i Java-programmering og trene deg for både kjerne- og avanserte Java-konsepter sammen med forskjellige Java-rammer som Hibernate & Vår .

Har du et spørsmål til oss? Nevn det i kommentarfeltet til denne 'Memory Allocation in Java' -bloggen, så kommer vi tilbake til deg så snart som mulig.