Kaj je pomnilnik skladov?
Stek v javi je del pomnilnika, ki vsebuje metode, lokalne spremenljivke in referenčne spremenljivke. Na pomnilnik sklada se vedno sklicuje v vrstnem redu Last-in-First-Out. Lokalne spremenljivke so ustvarjene v skladu.
Kaj je Heap Memory?
Kup je del pomnilnika, ki vsebuje Objekte in lahko vsebuje tudi referenčne spremenljivke. Spremenljivke primerka so ustvarjene v kopici
Dodelitev pomnilnika v Javi
Dodelitev pomnilnika v Javi je postopek, pri katerem so odseki navideznega pomnilnika v programu namenjeni shranjevanju spremenljivk in primerkov struktur in razredov. Vendar pa pomnilnik ni dodeljen objektu ob deklaraciji, ampak se ustvari samo sklic. Za dodelitev predmeta pomnilniku se uporablja metoda new (), zato je predmetu vedno dodeljen pomnilnik na kupu.
Dodelitev pomnilnika Java je razdeljena na naslednje razdelke:
- Kup
- Stack
- Koda
- Statično
Ta delitev spomina je potrebna za njegovo učinkovito upravljanje.
- Koda poglavje vsebuje vaše Bytecode .
- Stack del pomnilnika vsebuje metode, lokalne spremenljivke, in referenčne spremenljivke.
- Oddelek kopica vsebuje Predmete (lahko tudi referenčne spremenljivke).
- Oddelek Statični vsebuje statične podatke / metode .
Razlika med lokalno in spremenljivko primerka
Primerek spremenljivke je prijavljen znotraj razreda, ne pa tudi znotraj metode
class Student{int num; // num is instance variablepublic void showData{}
Lokalna spremenljivka se razglasijo v notranjosti z metodo, vključno z metodo argumentov .
public void sum(int a){int x = int a + 3;// a , x are local variables;}
Razlika med skladom in kupom
Kliknite tukaj, če video ni dostopen
Vzemimo primer, da to bolje razumemo.
Upoštevajte, da je vaša glavna metoda klicna metoda m1
public void m1{int x=20}
V javovi skladov bo iz metode m1 ustvarjen okvir.
Spremenljivka X v m1 bo ustvarjena tudi v okviru za m1 v skladišču. (Glej sliko spodaj).
Metoda m1 kliče metodo m2. V javovi skladovnic je ustvarjen nov okvir za m2 na vrhu okvirja m1.
Spremenljivke b in c bodo ustvarjene tudi v okvirju m2 v skladu.
public void m2(int b){boolean c;}
Ista metoda m2 kliče metodo m3. Spet se na vrhu sklada ustvari okvir m3 (glej sliko spodaj).
Zdaj recimo, da naša metoda m3 ustvarja objekt za razred "Account", ki ima dve različici spremenljivk int p in int q.
Account {Int p;Int q;}
Tu je koda za metodo m3
public void m3(){Account ref = new Account();// more code}
Izpis new Account () bo ustvaril predmet računa na kopici.
Referenčna spremenljivka "ref" bo ustvarjena v javovi skladov.
Operator dodelitve bo naredil referenčno spremenljivko, ki bo usmerjala na objekt v kopici.
Ko je metoda dokončana. Tok nadzora se bo vrnil k klicni metodi. Kar je v tem primeru metoda m2.
Sklop iz metode m3 se izpere.
Ker referenčna spremenljivka ne bo več kazala na predmet na kopici, bi bila primerna za odvoz smeti.
Ko je metoda m2 dokončana. Izpuščen bo iz sklada, njegova spremenljivka pa bo izpraznjena in ne bo več na voljo za uporabo.
Podobno za metodo m1.
Sčasoma se bo tok nadzora vrnil na začetno točko programa. Kar je običajno "glavna" metoda.
Kaj pa, če ima Object referenco kot spremenljivko primerka?
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 }
V tem primeru bo referenčna spremenljivka "otrok" ustvarjena v kopici, ki bo nato usmerjala na svoj objekt, podobno kot spodnji diagram.
Povzetek:
- Ko je metoda poklicana, se na vrhu sklada ustvari okvir.
- Ko je metoda dokončana, se tok nadzora vrne na klicno metodo in njen ustrezni okvir sklada se izprazni.
- Lokalne spremenljivke so ustvarjene v skladu
- Spremenljivke primerka so ustvarjene na kopici in so del predmeta, ki mu pripadajo.
- Referenčne spremenljivke so ustvarjene v skladu.