Što je memorija stoga?
Stog u javi dio je memorije koji sadrži metode, lokalne varijable i referentne varijable. Na memoriju stoga uvijek se upućuje u redoslijedu "Prvo-prvo-izašlo". Lokalne varijable kreiraju se u stogu.
Što je memorija hrpe?
Hrpa je odjeljak memorije koji sadrži Objekte, a može sadržavati i referentne varijable. Varijable instance kreiraju se u hrpi
Dodjela memorije u Javi
Dodjela memorije u Javi postupak je u kojem su odjeljci virtualne memorije odvojeni u programu za pohranu varijabli i primjeraka struktura i klasa. Međutim, memorija nije dodijeljena objektu prilikom deklaracije, već se stvara samo referenca. Za dodjelu memorije objekta koristi se metoda new (), pa se objektu uvijek dodjeljuje memorija na hrpi.
Dodjela memorije Java podijeljena je u sljedeće odjeljke:
- Hrpa
- Stog
- Kodirati
- Statički
Ova podjela memorije potrebna je za njezino učinkovito upravljanje.
- Odjeljak koda sadrži vaš bytecode .
- Odjeljak Stack memorije sadrži metode, lokalne varijable i referentne varijable.
- Odjeljak Hrpa sadrži Objekte (mogu sadržavati i referentne varijable).
- Odjeljak Statički sadrži statičke podatke / metode .
Razlika između lokalne i instance varijable
Varijabla instance deklarirana je unutar klase, ali ne i unutar metode
class Student{int num; // num is instance variablepublic void showData{}
Lokalna varijabla proglašeni su unutar jednog postupka, uključujući metode argumenata .
public void sum(int a){int x = int a + 3;// a , x are local variables;}
Razlika između stoga i hrpe
Kliknite ovdje ako videozapis nije dostupan
Uzmimo primjer da to bolje razumijemo.
Uzmite u obzir da je vaša glavna metoda koja poziva metodu m1
public void m1{int x=20}
U stogu java, okvir će se stvoriti iz metode m1.
Varijabla X u m1 također će se stvoriti u okviru za m1 u stogu. (Pogledajte sliku dolje).
Metoda m1 poziva metodu m2. U java stog stvoren je novi okvir za m2 na vrhu okvira m1.
Varijable b i c također će se stvoriti u okviru m2 u stogu.
public void m2(int b){boolean c;}
Ista metoda m2 poziva metodu m3. Ponovno se stvara okvir m3 na vrhu stoga (vidi sliku dolje).
Recimo sada da naša metoda m3 stvara objekt za klasu "Account", koja ima dvije instance varijable int p i int q.
Account {Int p;Int q;}
Evo šifre za metodu m3
public void m3(){Account ref = new Account();// more code}
Izvod new Account () stvorit će objekt računa u hrpi.
Referentna varijabla "ref" stvorit će se u stogu Java.
Operator dodjele napravit će referentnu varijablu koja će usmjeriti na objekt u Hrpi.
Nakon što metoda završi svoje izvršavanje. Tok kontrole vratit će se na metodu pozivanja. Što je u ovom slučaju metoda m2.
Slog iz metode m3 će se isprati.
Budući da referentna varijabla više neće usmjeravati na objekt u hrpi, bila bi prihvatljiva za odvoz smeća.
Nakon što metoda m2 dovrši svoje izvršavanje. Bit će iskočen iz stoga, a sve njegove varijable će se isprati i više neće biti dostupne za upotrebu.
Isto tako za metodu m1.
Na kraju će se tok kontrole vratiti na početnu točku programa. Što je obično "glavna" metoda.
Što ako objekt ima referencu kao varijablu instance?
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 }
U tom će se slučaju referentna varijabla "dijete" stvoriti u hrpi, koja će zauzvrat biti usmjerena na svoj objekt, nešto poput dijagrama prikazanog dolje.
Sažetak:
- Kada se pozove metoda, na vrhu stoga stvara se okvir.
- Nakon što je metoda dovršila izvršenje, tok kontrole se vraća pozivajućoj metodi i njezin odgovarajući okvir steka se ispire.
- Lokalne varijable kreiraju se u stogu
- Varijable instance izrađene su u hrpi i dio su objekta kojem pripadaju.
- Referentne varijable kreiraju se u stogu.