JVM (Java virtual machine) → Java dasturlash tilini boshqa tillardan ajratib turadigan qismi hisoblanadi. Yozilgan applicationni platform indepenetligini (platformadan mustaqillagini) taminlaydi. JVM mavhum hisoblanadi, uni qanday ishlashini ko’rish va boshqarishni deyarli iloji yo’q
WORA (Write one run anywhere) → Bir marta yozilgan application hamma operatsion tizimlarda bir xil ishlaydi. Shuning uchun shu tushuncha payda bo’lgan WORA bir marta, istalgan joyda yurgiz.

JVM ning ishlash prinsipi:
Class loaderlar haqida alohida post bo’ladi.
Class loader orqali yuklangan kod Java memoryga kelib tushadi. Ya’ni RAM ning JVM uchun ajratilgan qismiga. Java memory ham bir necha turlarga bo’linadi 1. Heap 2. Stack 3. Method area 4. PC register 5. Native method stack
Heap → Java memoryning bir qismi. Heapda objectlar saqlanadi. Classlar emas.
Stack → Asosan primitive tiplarni saqlaydi.
Method area → Bu qismda classlar, classlarni nomlari saqlanadi.
PC register → Qayerga kelinganlikni saqlab turadi, ya’ni kod qatorma - qator o’qib ketilyapti. Boshqa classdan method chaqirilgan, u methodni borib o’qib kelgunicha. Hozirgi classda qayerga kelinganligi PC registerda saqlab turiladi.
Native method stack → Bu ham har bir thread uchun alohidadan yaratiladi. Buning ichida native methodlar saqlanadi (Javaga aloqador bo’lmagan).
Interpretatsiya → Eng oxirida java byte code interpretatsiya qilinishni boshlaydi. Interpertatsiyaning compilatsiyaga qaraganda bir yomon tomoni bor, bu kodni qatorma qator native kodga o’tkizadi. Kod takrorlangan bo’lsa uni qaytadan interpretatsiya qiladi.
JIT (Jast In Time compiler) → Bu interpretatsiyani ishini tezlashtirish uchun ishlatiladi. Ya’ni interpretatsiyada qatorma qator interpretatsiya qilingangan koddagi, takrorlangan qatorlarni qayta interpretatsiya qilmasdan olib keladi. Shuning uchun java dasturlash tili boshqa interpretator tillarga nisbatdan tez va qisman kompiler tillardan sekinroq. Tezligining sababi JIT da, sekinligining sababi kodlar interpretatsiyaga uchrashida.
Xulosa, JVM ga java byte codelar class loader orqali yuklanadi. U vaqtincha java memoryda saqlanadi va navbati kelganida interpretatsiya qilinib native kodga o’giriladi.
Yuqoridagi ishlar bo’lish bilan bir qatorda, Garbage collector ham o’z ishini bajarayotgan bo’ladi, heapni tozalab turadi. Bu ham java dasturlash tiliga ustunlik beradi. C, C++ tillarda bu tushuncha mavjud emas, xotirani dasturchining o’zi tozalab yurishi talab qilinadi. Java da emas garbage collectorni o’zi hal qiladi bu masalani.
©️ Elbek Nurmatov | Java interview questions