„Java Stack and Heap“: „Java“ atminties paskirstymo pamoka

Kas yra „Stack Memory“?

„Stack in Java“ yra atminties dalis, kurioje yra metodai, vietiniai kintamieji ir pamatiniai kintamieji. Krūvos atmintis visada nurodoma tvarka „Paskutinis pirmas - pirmas - išeina“. Šūsnyje sukurti vietiniai kintamieji.

Kas yra krūvos atmintis?

Krūva yra atminties dalis, kurioje yra objektai, taip pat gali būti nuorodų kintamieji. Egzempliorių kintamieji yra sukurti kaupe

Atminties paskirstymas „Java“

Atminties paskirstymas „Java“ yra procesas, kurio metu virtualiosios atminties sekcijos yra atidedamos programoje kintamiesiems ir struktūrų bei klasių egzemplioriams saugoti. Tačiau atmintis objektui nepriskiriama deklaruojant, bet sukuriama tik nuoroda. Objekto atminties paskirstymui naudojamas naujas () metodas, todėl objektui visada skiriama atmintis ant krūvos.

„Java“ atminties paskirstymas yra padalintas į šiuos skyrius:

  1. Krūva
  2. Sukrauti
  3. Kodas
  4. Statinis

Šis atminties padalijimas reikalingas efektyviam jo valdymui.

  • Kodas skyriuje yra savo bytecode .
  • Atminties skyriuje „ Stack“ yra metodai, vietiniai kintamieji ir pamatiniai kintamieji.
  • Sukrauk skyriuje pateikiama objektai (taip pat gali būti referencinių kintamųjų).
  • Statinis skyriuje pateikiama statinių duomenų / metodus .

Skirtumas tarp vietinio ir egzemplioriaus kintamojo

Egzemplioriaus kintamasis yra deklaruojamas klasėje, bet ne metodo viduje

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

Vietinis kintamasis yra paskelbta viduje yra metodas, įskaitant metodo argumentų .

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

Skirtumas tarp „Stack“ ir „Heap“


Spustelėkite čia, jei vaizdo įrašas nepasiekiamas

Paimkime pavyzdį, kad tai geriau suprastume.

Apsvarstykite, kad jūsų pagrindinis metodo iškvietimo metodas m1

public void m1{int x=20}

„Stack Java“ rėmas bus sukurtas iš metodo m1.

Kintamasis X m1 taip pat bus sukurtas rėmo m1 rietuvėje. (Žr. Paveikslėlį žemiau).

Metodas m1 vadinamas m2 metodu. „Stack“ java yra sukurtas naujas rėmas m2 ant rėmo m1.

Kintamieji b ir c taip pat bus sukurti rėmelyje m2 rietuvėje.

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

Tas pats metodas m2 yra vadinamas metodas m3. Vėl kamino viršuje sukuriamas rėmas m3 (žr. Paveikslėlį žemiau).

Tarkime, kad mūsų metodas m3 sukuria objektą „Sąskaitai“, kurioje yra du kintamieji int p ir int q.

Account {Int p;Int q;}

Čia yra metodo m3 kodas

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

Išrašas new Account () sukurs sąskaitos objektą su kaupu.

Etaloninis kintamasis „ref“ bus sukurtas „stack“ Java.

Operatorius „=“ padarys pamatinį kintamąjį, nurodantį į kaupo objektą.

Kai metodas bus baigtas. Valdymo srautas grįš į skambinimo metodą. Kuris šiuo atveju yra metodas m2.

Kaminas iš metodo m3 bus išpiltas.

Kadangi pamatinis kintamasis nebebus nukreiptas į kaupe esantį objektą, jis bus tinkamas rinkti šiukšles.

Kai metodas m2 bus baigtas. Jis bus iššokęs iš kamino ir visas jo kintamasis bus išplautas ir nebebus naudojamas.

Panašiai ir metodo m1 atveju.

Galų gale valdymo srautas grįš į programos pradžios tašką. Kuris paprastai yra „pagrindinis“ metodas.

Ką daryti, jei objekto egzemplioriaus kintamasis yra nuoroda?

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 }

Tokiu atveju pamatinis kintamasis „vaikas“ bus sukurtas su kaupu, kuris savo ruožtu bus nukreiptas į savo objektą, panašų į toliau pateiktą diagramą.

Santrauka:

  • Kai iškviečiamas metodas, kamino viršuje sukuriamas rėmas.
  • Kai metodas bus baigtas, valdymo srautas grįš į iškvietimo metodą ir jo atitinkamas rietuvės rėmas bus praplautas.
  • Šūsnyje sukurti vietiniai kintamieji
  • Egzempliorių kintamieji yra sukurti kaupe ir yra objekto, kuriam jie priklauso, dalis.
  • Šūsnyje sukurti referenciniai kintamieji.

Įdomios straipsniai...