JVM tomonidan qanday turdagi xotira maydonlari ajratilgan ?

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.


RASM 1

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.


JVM

Stack haqida bilishimiz kerak bo'lganlari

  • Javada har bir Thread (oqim) uchun bitta Stack yaratiladi. Biz agar 3 ta Thread bilan ishlasak demak 3ta Stack yaratiladi. Ular bir birini umuman ko'rmaydi. Namunada 1ta Thread va 1 ta Stack ni ko'rgan edik.
  • Metod chaqirilsa uning uchun Stack dan 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 Stack dagi bor bo'lgan xotira maydonining tepasiga qo'yilib ketaveriladi......
  • Metod tugaganidan keyin metod uchun ajtarilgan Stack dagi xotira maydoni tozalanadi. Garbage Collector tozalab tashaydi.
  • Stack da 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.
  • JVM Stack 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


Report Page