Java Stack and Heap: Java Memory Allocation Tutorial

Innholdsfortegnelse:

Anonim

Hva er Stack Memory?

Stack in java er en del av minnet som inneholder metoder, lokale variabler og referansevariabler. Stakkminne refereres alltid til i Last-In-First-Out-rekkefølge. Lokale variabler opprettes i stabelen.

Hva er Heap Memory?

Heap er en del av minnet som inneholder objekter og kan også inneholde referansevariabler. Forekomstvariabler opprettes i bunken

Minnetildeling i Java

Memory Allocation in Java er prosessen der de virtuelle minneseksjonene er avsatt i et program for lagring av variabler og forekomster av strukturer og klasser. Minnet tildeles imidlertid ikke til et objekt ved erklæring, men det opprettes bare en referanse. For minnetildeling av objektet brukes ny () -metode, så objektet tildeles alltid minne på dyngen.

Java Memory Allocation er delt inn i følgende seksjoner:

  1. Haug
  2. Stable
  3. Kode
  4. Statisk

Denne delingen av minne er nødvendig for effektiv styring.

  • The code delen inneholder bytecode .
  • Den Stack del av minnet som inneholder metoder, lokale variable, og referanse variabler.
  • Den Heap delen inneholder objekter (kan også inneholde referanse variabler).
  • Den statiske delen inneholder statiske data / metoder .

Forskjellen mellom lokal og forekomstvariabel

Forekomstvariabel er erklært i en klasse, men ikke i en metode

class Student{int num; // num is instance variablepublic void showData{}

Lokale variable er deklarert inne i en fremgangsmåte som omfatter metoden argumenter .

public void sum(int a){int x = int a + 3;// a , x are local variables;}

Forskjellen mellom Stack og Heap


Klikk her hvis videoen ikke er tilgjengelig

La oss ta et eksempel for å forstå dette bedre.

Tenk på at din viktigste metode for anropsmetode m1

public void m1{int x=20}

I stack-java vil det opprettes en ramme fra metode m1.

Variabelen X i m1 vil også bli opprettet i rammen for m1 i stabelen. (Se bildet nedenfor).

Metode m1 kalles metode m2. I stack-java opprettes en ny ramme for m2 på toppen av rammen m1.

Variabel b og c vil også bli opprettet i en ramme m2 i en bunke.

public void m2(int b){boolean c;}

Samme metode m2 kalles metode m3. Igjen opprettes en ramme m3 på toppen av bunken (se bildet nedenfor).

La oss si at metoden m3 lager et objekt for klassen "Konto", som har to forekomster variabel int p og int q.

Account {Int p;Int q;}

Her er koden for metode m3

public void m3(){Account ref = new Account();// more code}

Uttalelsen ny konto () vil opprette et kontoobjekt i bunken.

Referansevariabelen "ref" blir opprettet i en stack-java.

Oppgaven operatøren vil lage en referansevariabel for å peke på objektet i haugen.

Når metoden er fullført. Flyten av kontroll vil gå tilbake til anropsmetoden. Som i dette tilfellet er metode m2.

Bunken fra metode m3 skylles ut.

Siden referansevariabelen ikke lenger peker mot objektet i dyngen, vil den være kvalifisert for søppeloppsamling.

Når metoden m2 er fullført. Den vil poppes ut av bunken, og hele variabelen vil skylles og ikke lenger være tilgjengelig for bruk.

Likeledes for metode m1.

Etter hvert vil kontrollflyten gå tilbake til startpunktet for programmet. Som vanligvis er den "viktigste" metoden.

Hva om objektet har en referanse som instansvariabel?

public static void main(String args[]) {A parent = new A(); //more code } class A{ B child = new B(); int e; //more code } class B{ int c; int d; //more code }

I dette tilfellet vil referansevariabelen "barn" bli opprettet i dyngen, som igjen vil peke på objektet, noe som diagrammet vist nedenfor.

Sammendrag:

  • Når en metode kalles, opprettes en ramme på toppen av bunken.
  • Når en metode har fullført kjøringen, returnerer kontrollflyten til anropsmetoden, og dens tilsvarende stableramme skylles.
  • Lokale variabler opprettes i stabelen
  • Forekomstvariabler opprettes i dyngen og er en del av objektet de tilhører.
  • Referansevariabler opprettes i stabelen.