Hvad er hukommelsesallokering i Java? Stack og Heap-hukommelse

Denne artikel baseret på 'Hukommelsesallokering i Java' hjælper dig med en detaljeret viden om hukommelsesallokering sammen med Stack og Heap-datastrukturer.

Hukommelsestildeling er en proces, hvor computerprogrammer og -tjenester tildeles fysisk eller virtuel hukommelse plads. I denne artikel lærer vi om hukommelsestildeling i og vi vil diskutere Stack og Heap Memory.



Hvad er Stack Memory?

Java Stack-hukommelse bruges til udførelse af en tråd. De indeholder metodespecifikke værdier, der er kortvarige, og referencer til andre objekter i bunken, der bliver henvist fra metoden.



Stak hukommelse refereres altid til LIFO (Last-in-First-Out) bestille. Hver gang en metode påberåbes, oprettes der en ny blok i stakhukommelsen, så metoden kan indeholde lokale primitive værdier og henvisning til andre objekter i metoden.

Så snart metoden slutter, bliver blokken ubrugt og bliver tilgængelig til den næste metode.



hvad er datavisualisering i tableau

Stakhukommelsesstørrelse er meget mindre sammenlignet med Heap-hukommelse.

Nøglefunktioner i Stack Memory

Bortset fra hvad vi hidtil har diskuteret, er følgende nogle andre funktioner i Stak hukommelse:

  • Den vokser og krymper, efterhånden som nye metoder kaldes og returneres
  • Variabler inde i stakken findes kun, så længe den metode, der oprettede dem, kører
  • Det er det automatisk tildeles og deallocated når metoden er færdig med udførelsen
  • Hvis denne hukommelse er fuld, kaster Java java.lang.StackOverFlowError
  • Adgang til denne hukommelse er hurtig sammenlignet med bunkehukommelse
  • Denne hukommelse er tråd-sikker da hver tråd fungerer i sin egen stak

Metoder i Stack-klasse

  • Objekt skub ( Objektelement ): Skubber et element på toppen af ​​stakken.
  • Objekt pop (): Fjerner og returnerer det øverste element i stakken. En 'EmptyStackException' undtagelse kastes, hvis vi kalder pop (), når påkaldsstakken er tom.
  • Objektkig (): Returnerer elementet øverst på stakken, men fjerner det ikke.
  • Boolsk tom (): Det vender tilbage, hvis intet er øverst på stakken. Ellers returnerer falsk.
  • int-søgning ( Objektelement ): Det bestemmer, om der findes et objekt i stakken. Hvis elementet findes, returnerer det elementets position fra toppen af ​​stakken. Ellers returnerer det -1.

Java-kode til stakimplementering

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

//Produktion



memory-allocation-in-java

Lad os nu flytte ind i Heap Space.

Heap Space i Java

Hukommelsen tildeles under udførelsen af ​​instruktioner skrevet af programmører. Bemærk, at navnet bunke ikke har noget at gøre med bunndatastrukturen. Det kaldes bunke, fordi det er en bunke hukommelsesplads, der er tilgængelig for programmører tildelt og affordele. Hvis en programmør ikke håndterer denne hukommelse godt, kan en hukommelseslækageske i programmet.

Nøglefunktioner i Java Heap Memory

  • Bortset fra hvad vi hidtil har diskuteret, er følgende nogle andre funktioner i bunkerum:
  • Det er tilgængeligt via komplekse hukommelsesstyringsteknikker, der inkluderer Young Generation, Old eller Fastholdt generation, og Permanent generation
  • Hvis bunkepladsen er fuld, kaster Java java.lang.OutOfMemoryError
  • Adgang til denne hukommelse er relativt langsommere end stakhukommelsen
  • Denne hukommelse, i modsætning til stakken, deallokeres ikke automatisk. Det har brug for Skraldemand at frigøre ubrugte objekter for at bevare effektiviteten af ​​hukommelsesforbruget
  • I modsætning til stak er en bunke ikke tråd-sikker og skal beskyttes ved korrekt synkronisering af koden

Forskel mellem Java Heap Space og Stack Memory

Baseret på ovenstående forklaringer kan vi let konkludere følgende forskelle mellem Bunke og Stak hukommelse.

  • Bunke hukommelse bruges af alle dele af applikationen, mens stack-hukommelse kun bruges af en udførelsestråd.
  • Hver gang et objekt oprettes, gemmes det altid i Heap-rummet, og stack-hukommelsen indeholder henvisningen til det. Stack-hukommelse indeholder kun lokale primitive variabler og referencevariabler til objekter i dyngerum.
  • Objekter, der er gemt i bunken, er tilgængelige globalt, mens stackhukommelse ikke kan tilgås af andre tråde.
  • Hukommelsesstyring i stakken udføres i a LIFO måde, mens det er mere komplekst i Heap-hukommelse, fordi det bruges globalt. Bunkehukommelse er opdelt i Unge generation, gamle generation osv., flere detaljer på Java Garbage Collection.
  • Stack hukommelse er kortvarig der henviser til, at bunkehukommelse lever fra starten til slutningen af ​​applikationens udførelse.
  • Vi kan bruge -XMX og -XMS JVM-mulighed for at definere startstørrelse og maksimal størrelse på bunkehukommelse. Vi kan bruge -XSS for at definere stakhukommelsesstørrelsen.
  • Når stackhukommelsen er fuld, kaster Java runtime java.lang.StackOverFlowError hvorimod hvis bunkehukommelsen er fuld, kaster den java.lang.OutOfMemoryError: Java Heap Spacefejl.
  • Stakhukommelsesstørrelsen er meget mindre sammenlignet med Heap-hukommelse. På grund af enkelhed i hukommelsesallokering (LIFO), stack hukommelse er meget hurtig sammenlignet medbunkehukommelse.

Sammenligningstabel

PARAMETER STAK HEAP
Grundlæggende Hukommelse allokeres i en sammenhængende blokHukommelse tildeles i en tilfældig rækkefølge
Tildeling og omfordeling Automatisk med kompilatorManual af programmør
Koste MindreMere
Implementering HårdtLet
Adgangstid HurtigereLangsommere
Hovedemne Mangel på hukommelseHukommelsesfragmentering
Forskelens lokalitet FremragendeTilstrækkelig
Fleksibilitet Fast prisÆndring af størrelse er mulig

Med dette kommer vi til slutningen af ​​denne 'Memory Allocation in Java' -vejledning. Jeg håber, du har forstået konceptet og dets implementering gennem nogle eksempler i realtid.

Nu hvor du har forstået detHukommelsesallokering i Javagrundlæggende gennem denne 'Hukommelsesallokering i Java' -artikel, se af Edureka, et pålideligt online læringsfirma med et netværk på mere end 250.000 tilfredse elever spredt over hele kloden. Edurekas Java J2EE- og SOA-kurser er designet til studerende og fagfolk, der ønsker at være Java-udvikler. Kurset er designet til at give dig et forspring i Java-programmering og træne dig til både kerne- og avancerede Java-koncepter sammen med forskellige Java-rammer som Hibernate & Forår .

Har du et spørgsmål til os? Nævn det i kommentarfeltet i denne 'Memory Allocation in Java' -blog, og vi vender tilbage til dig hurtigst muligt.