Java verem és kupac: Java memória allokációs bemutató

Tartalomjegyzék:

Anonim

Mi a verem memória?

A verem a java-ban a memória egy része, amely módszereket, helyi változókat és referenciaváltozókat tartalmaz. A verem memóriájára mindig az utolsó-az-első-kimenet sorrendben hivatkozunk. A veremben helyi változók jönnek létre.

Mi a halom memória?

A halom a memória egy része, amely objektumokat tartalmaz, és referenciaváltozókat is tartalmazhat. A példányváltozók a kupacban jönnek létre

Memória allokáció Java-ban

A memória allokációja a Java-ban az a folyamat, amelyben a virtuális memória szakaszokat egy programban különítik el a változók és a struktúrák és osztályok példányainak tárolására. A memória azonban nincs kijelölve egy objektumhoz, csak egy hivatkozás jön létre. Az objektum memória-allokációjához új () metódust használnak, így az objektumhoz mindig memória tartozik a kupacban.

A Java memória kiosztása a következő szakaszokra oszlik:

  1. Halom
  2. Kazal
  3. Kód
  4. Statikus

Ez a memóriafelosztás szükséges a hatékony kezeléséhez.

  • A kód szakasz tartalmazza a bájtkódodat .
  • A memória Halom szakasza metódusokat, helyi változókat és referenciaváltozókat tartalmaz.
  • A Halom szakasz Objektumokat tartalmaz (referenciaváltozókat is tartalmazhat).
  • A Statikus szakasz Statikus adatokat / módszereket tartalmaz .

Különbség a helyi és a példányváltozó között

A példányváltozó deklarálva van egy osztályon belül, de nem egy metóduson belül

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

A helyi változót egy metóduson belül deklaráljuk , beleértve a metódus argumentumokat .

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

Különbség Stack és Heap között


Kattintson ide, ha a videó nem érhető el

Vegyünk egy példát, hogy ezt jobban megértsük.

Fontolja meg, hogy az m1 metódus hívásának fő módszere

public void m1{int x=20}

A verem java-ban egy keretet hozunk létre az m1 módszerből.

Az m1-ben szereplő X változó szintén létrejön az verem m1-es keretében. (Lásd az alábbi képet).

Az m1 módszer az m2 metódust hívja meg. A verem java-ban egy új keret jön létre az m2 számára az m1 keret tetején.

A b és c változó szintén létrejön egy m2 keretben, veremben.

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

Ugyanaz az m2 módszer hívja a m3 módszert. Ismét egy m3 keret jön létre a verem tetején (lásd az alábbi képet).

Tegyük fel, hogy az m3 módszerünk létrehoz egy objektumot a "Számla" osztályhoz, amelynek két int p és int q változója van.

Account {Int p;Int q;}

Itt van a m3 módszer kódja

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

Az új számla () kimutatás egy halom számla objektumot hoz létre.

A "ref" referencia változó egy verem java-ban jön létre.

A operátor hozzárendel egy referencia változót, amely a Halomban lévő objektumra mutat.

Miután a módszer befejezte a végrehajtást. A vezérlés folyamata visszatér a hívási módszerre. Ami ebben az esetben a m2 módszer.

A m3 módszerből származó verem kiürül.

Mivel a referencia változó már nem a halomban lévő objektumra mutat, jogosult lenne a szemétszállításra.

Miután az m2 metódus befejezte a végrehajtását. Kiugrik a veremből, és az összes változója ki lesz mosva, és többé nem lesz használható.

Ugyanígy az m1 módszer esetében is.

Végül a vezérlés folyamata visszatér a program kezdőpontjára. Ami általában a "fő" módszer.

Mi van, ha az Object példányváltozója egy hivatkozás?

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 }

Ebben az esetben a "gyermek" referenciaváltozó halmban jön létre, amely viszont az objektumára mutat, ami hasonló az alább látható diagramhoz.

Összegzés:

  • Metódus meghívásakor egy keret jön létre a verem tetején.
  • Amint a metódus végrehajtása befejeződött, a vezérlés folyamata visszatér a hívási módszerhez, és a hozzá tartozó veremkeretet kiüríti.
  • A veremben helyi változók jönnek létre
  • A példányváltozók a kupacban jönnek létre, és azok az objektumok részét képezik, amelyekhez tartoznak.
  • A veremben referenciaváltozók jönnek létre.