JVM tomonidan qanday turdagi xotira maydonlari ajratilgan ?
Bu ikkala xotira turi ham juda muhim va ular bir biridan ajraladi.
Stack
Stack bu JVM RAM dan band qilgan xotirani bir qismi.
Agar Bir boshidan shoshmasdan gapiradigan bolsak.
Javada metod chaqirilganda Stack dan shu metod uchun xotira maydoni yaratiladi.
Shu metod da yaratilgan primitive o'zgaruvchilar va ob'ektlarni reference larini ushlab turuvchi o'zgaruchilar ham shu maydonda bo'ladi.
Yangi metod chaqirilsa Stack da bor bo'lgan xotira maydoni tepasiga yangi metod uchun xotira maydoni yaratiladi.
Metod tugaganidan keyin u stack dan olib tashlanadi. Ya'ni unga ajratilgan xotira maydoni tozalanadi.
Shu tarzda davom etaveradi.
Quyidagi namunaga qarang.

Shu yozilgan kodlar ishga tushganda main metod chaqiriladi. Stack da nima bo'lishini ko'raylik.
- main metod chaqirilganda Stack da main metodi uchun xotira maydoni yaratiladi.
- main metodni ichiga kirganda primitive tiplar Stack da yaratiladi.
- String bu primitive tip emas. U object. Object larni ushlab turuvchi o'zgaruvchilar Stack da yaratiladi va ularning qiymatlari Heap da yaratiladi.
- s - String tipli bo'lgani uchun uning qiymati Heap ning String pool degan joyida joylashtiradi va reference ni (ko'rsatgichni) s ga joylashtirib qo'yadi.

Stack haqida bilishimiz kerak bo'lganlari
- Javada har bir Thread (oqim) uchun bitta
Stackyaratiladi. Biz agar 3 ta Thread bilan ishlasak demak 3taStackyaratiladi. Ular bir birini umuman ko'rmaydi. Namunada 1ta Thread va 1 ta Stack ni ko'rgan edik. - Metod chaqirilsa uning uchun
Stackdan joy (xotira maydoni) ochiladi. - Metoddagi primitive tiplar va ob'ektlarni reference sini (ko'rsatgichini) ushlab turuvchi o'zgaruvchilar shu xotira maydonida yaratiladi.
- Metod chaqirilsa unga ajratilgan xotira maydoni
Stackdagi bor bo'lgan xotira maydonining tepasiga qo'yilib ketaveriladi...... - Metod tugaganidan keyin metod uchun ajtarilgan
Stackdagi xotira maydoni tozalanadi. Garbage Collector tozalab tashaydi. Stackda barcha metodlar tugaganidan keyin dastur ham o'z ishini tugatadi.- Stack -
LIFO(Last-In-First-Out , Oxirgi-Kirgan-Birinchi-Chiqadi) tartibida ishlaydi. Ya'ni oxirida turgan metod birinchi bo'lib bajarilib chiqib ketadi. JVMStack uchun qandaydir miqdorda joy ajratadi. Agar u to'lib, joy yetmasa java.lang.StackOverFlowError exceptionni tashaydi.Stack- dagi elementlar faqat shu thread da ko'rinadi. Ya'ni Stack xotirasida yaratilgan o'zgaruvchilar faqat shu Stack bo'ylab ishlatish mumkin. Bitta Stack dagi o'zgaruvchini boshqa Stack dan ishlatib bo'lmaydi. Sababi Har bir Thread uchun alohida Stack yaratiladi.
Davomini ushbu linkdagi maqoladan batafsil o'qishingiz mumkin.
https://dasturlash.uz/lesson/java/article/1c7f79f2-2387-11ec-9c5d-e83935115a22