Kas ir kaudzes atmiņa?
Stack in java ir atmiņas sadaļa, kas satur metodes, lokālos mainīgos un atsauces mainīgos. Uz kaudzes atmiņu vienmēr atsaucas secībā Pēdējā-iekšā-vispirms. Lekcijā tiek izveidoti lokālie mainīgie.
Kas ir kaudzes atmiņa?
Kaudze ir atmiņas sadaļa, kas satur objektus un var saturēt arī atsauces mainīgos. Kupā tiek izveidoti instances mainīgie
Atmiņas piešķiršana Java
Atmiņas piešķiršana Java ir process, kurā virtuālās atmiņas sadaļas tiek atvēlētas programmā mainīgo un struktūru un klašu eksemplāru glabāšanai. Tomēr atmiņa netiek piešķirta objektam deklarācijā, bet tiek izveidota tikai atsauce. Objekta atmiņas piešķiršanai tiek izmantota jauna () metode, tāpēc objektam vienmēr tiek piešķirta atmiņa uz kaudzes.
Java atmiņas piešķiršana ir sadalīta šādās sadaļās:
- Kaudze
- Kaudze
- Kods
- Statisks
Šis atmiņas sadalījums ir nepieciešams tā efektīvai pārvaldībai.
- Kods sadaļā ir jūsu bytecode .
- Stack sadaļā atmiņa satur metodes, vietējās mainīgie un atsauces mainīgos.
- Kaudze sadaļā ir objektu (var būt arī atsauces mainīgajiem).
- Statiskais sekcija satur statisko datu / metodes .
Atšķirība starp lokālo un instances mainīgo
Gadījuma mainīgais tiek deklarēts klasē, bet ne metodē
class Student{int num; // num is instance variablepublic void showData{}
Vietējā mainīgais tiek deklarēts iekšpusē ar metodi, tajā skaitā metodes argumentus .
public void sum(int a){int x = int a + 3;// a , x are local variables;}
Starpība starp kaudzi un kaudzi
Noklikšķiniet šeit, ja videoklips nav pieejams
Ņemsim piemēru, lai to labāk saprastu.
Apsveriet, ka jūsu galvenā metode zvana metode m1
public void m1{int x=20}
Steka java tiks izveidots rāmis no metodes m1.
Mainīgais X m1 tiks izveidots arī rāmī m1 kaudzē. (Skatīt attēlu zemāk).
Metode m1 izsauc metodi m2. Steka java ir izveidots jauns rāmis m2 virs rāmja m1.
Mainīgie b un c tiks izveidoti arī rāmī m2 kaudzē.
public void m2(int b){boolean c;}
Tā pati metode m2 izsauc metodi m3. Atkal rāmja augšpusē tiek izveidots rāmis m3 (skat. Attēlu zemāk).
Pieņemsim, ka mūsu metode m3 rada objektu klasei "Konts", kurā ir divi mainīgie int p un int q.
Account {Int p;Int q;}
Šeit ir metodes m3 kods
public void m3(){Account ref = new Account();// more code}
Izraksts new Account () izveidos konta objektu kaudzē.
Atsauces mainīgais "ref" tiks izveidots kaudzes Java.
Uzdevums operators izveidos atsauces mainīgo, lai norādītu uz kaudzē esošo objektu.
Kad metode ir pabeigta. Vadības plūsma atgriezīsies pie izsaukšanas metodes. Kas šajā gadījumā ir metode m2.
Metodes m3 kaudze tiks izskalota.
Tā kā atsauces mainīgais vairs nenorādīs uz kaudzē esošo objektu, tas būtu piemērots atkritumu savākšanai.
Kad metode m2 ir pabeigta. Tas tiks izlaists no kaudzes, un visi tā mainīgie tiks izskaloti un vairs nebūs pieejami lietošanai.
Tāpat arī metodei m1.
Galu galā vadības plūsma atgriezīsies programmas sākuma punktā. Kas parasti ir "galvenā" metode.
Ko darīt, ja objektam ir atsauce kā instances mainīgais?
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 }
Šajā gadījumā atsauces mainīgais "bērns" tiks izveidots kaudzē, kas savukārt norādīs uz tā objektu, kaut kas līdzīgs zemāk redzamajai diagrammai.
Kopsavilkums:
- Izsaucot metodi, kaudzes augšpusē tiek izveidots rāmis.
- Kad metode ir pabeigta, vadības plūsma atgriežas pie izsaukšanas metodes un tai atbilstošais kaudzes rāmis tiek izskalots.
- Lekcijā tiek izveidoti lokālie mainīgie
- Gadījuma mainīgie tiek izveidoti kaudzē un ir daļa no objekta, kam tie pieder.
- Kaudzē tiek izveidoti atsauces mainīgie.