Mikä on pinomuisti?
Stack in java on osa muistia, joka sisältää menetelmiä, paikallisia muuttujia ja viitemuuttujia. Pino-muistiin viitataan aina Last-In-First-Out-järjestyksessä. Paikalliset muuttujat luodaan pinoon.
Mikä on kasan muisti?
Heap on osa muistia, joka sisältää objekteja ja voi sisältää myös viitemuuttujia. Ilmentymämuuttujat luodaan kasaan
Muistin allokointi Java-muodossa
Java-muistin allokointi on prosessi, jossa virtuaalimuistiosuudet varataan ohjelmassa muuttujien ja rakenteiden ja luokkien esiintymien tallentamiseen. Muistia ei kuitenkaan jaeta objektille ilmoituksessa, vaan luodaan vain viite. Kohteen muistin allokoinnissa käytetään uutta () -menetelmää, joten objektille varataan aina muisti kasaan.
Java-muistin allokointi on jaettu seuraaviin osiin:
- Pino
- Pino
- Koodi
- Staattinen
Tätä muistinjakoa tarvitaan sen tehokkaaseen hallintaan.
- Koodi Osio sisältää bytecode .
- Pino muistin osa, joka sisältää menetelmiä, paikalliset muuttujat, ja viittaus muuttujia.
- Kasan osassa Esineet (voi myös sisältää viittaus muuttujia).
- Staattinen osa sisältää Staattinen data / menetelmiä .
Ero paikallisen ja esiintymämuuttujan välillä
Ilmentymämuuttuja ilmoitetaan luokan sisällä, mutta ei menetelmän sisällä
class Student{int num; // num is instance variablepublic void showData{}
Paikallinen muuttuja on julistettu sisällä menetelmällä, joka sisältää menetelmän argumentteja .
public void sum(int a){int x = int a + 3;// a , x are local variables;}
Ero pinon ja kasan välillä
Napsauta tätä, jos video ei ole käytettävissä
Otetaan esimerkki ymmärtääksemme tämän paremmin.
Harkitse, että päämenetelmäsi kutsumenetelmä m1
public void m1{int x=20}
Pino jaavassa kehys luodaan menetelmästä m1.
Muuttuja X m1: ssä luodaan myös pinon m1: n kehykseen. (Katso alla oleva kuva).
Menetelmä m1 kutsuu menetelmää m2. Pino Java -ohjelmassa luodaan uusi kehys m2: lle kehyksen m1 päälle.
Muuttujat b ja c luodaan myös pinon kehykseen m2.
public void m2(int b){boolean c;}
Sama menetelmä m2 kutsuu menetelmää m3. Jälleen pinon yläosaan luodaan kehys m3 (katso alla oleva kuva).
Sanotaan nyt, että menetelmä m3 luo objektin luokalle "Tili", jolla on kaksi instanssia muuttujaa int p ja int q.
Account {Int p;Int q;}
Tässä on menetelmän m3 koodi
public void m3(){Account ref = new Account();// more code}
Lauseke uusi tili () luo tiliobjektin kasaan.
Viitemuuttuja "ref" luodaan pino-Java.
Määritys -operaattori tekee viitemuuttujan osoittamaan kasan kohteeseen.
Kun menetelmä on suoritettu loppuun. Ohjausvirta palaa takaisin kutsumenetelmään. Mikä tässä tapauksessa on menetelmä m2.
Menetelmän m3 pino huuhdellaan pois.
Koska vertailumuuttuja ei enää osoita kasaan olevaa objektia, se olisi kelvollinen roskakoriin.
Kun menetelmä m2 on suoritettu loppuun. Se ponnahtaa ulos pinosta, ja kaikki sen muuttujat huuhdellaan eikä niitä voida enää käyttää.
Samoin menetelmän m1 kohdalla.
Lopulta ohjausvirta palaa ohjelman aloituspisteeseen. Mikä yleensä on "tärkein" menetelmä.
Entä jos Objectin ilmentymämuuttuja on viite?
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 }
Tässä tapauksessa viitemuuttuja "lapsi" luodaan kasaan, joka puolestaan osoittaa kohteeseen, jotain alla olevan kaavion kaltaista.
Yhteenveto:
- Kun menetelmää kutsutaan, pinon yläosaan luodaan kehys.
- Kun menetelmä on suoritettu loppuun, ohjausvirta palaa kutsumenetelmään ja sen vastaava pinokehys huuhdellaan.
- Paikalliset muuttujat luodaan pinoon
- Ilmentymämuuttujat luodaan kasaan ja ovat osa objektia, johon ne kuuluvat.
- Viitemuuttujat luodaan pinoon.