2-modul · 7-dars: Memory Management
Daraja: O'rta
Memory Management. OOP bo‘yicha nazariya, amaliy namuna va mustaqil mashq.
Tushuntirish
## Dars maqsadi Memory Management tushunchalarini farqlash, nima uchun kerakligini izohlash va kichik misolda qo‘llash.
## Nazariya Xotirani ajratish va bo'shatishni boshqarish. Java-da buni asosan JVM va Garbage Collector bajaradi.
Asosan: Stack, Heap, Method Area (Metaspace), PC Register va Native Method Stack.
## Intervyuga tayyorgarlik ### Memory Management nima? Xotirani ajratish va bo'shatishni boshqarish. Java-da buni asosan JVM va Garbage Collector bajaradi.
### Xotira turlari? Asosan: Stack, Heap, Method Area (Metaspace), PC Register va Native Method Stack.
### Qaysilari asosiy xotiralar? Stack va Heap.
### Stack xotira qanday xotira? Method chaqiruvlari, local o'zgaruvchilar va reference lar saqlanadigan LIFO xotira; har bir thread uchun alohida.
### Stack Frame nima? Har bir method chaqiruvi uchun stack da ajratiladigan blok (parametrlar, local o'zgaruvchilar).
### Stack xotirasining afzalliklari? Tez, method tugagach avtomatik tozalanadi, thread-safe.
### LIFO nima? Last In First Out — oxirgi kirgan birinchi chiqadi.
### StackOverflow qachon yuzaga keladi? Stack to'lib ketganda — masalan cheksiz yoki juda chuqur rekursiyada.
### Heap qanday qismlardan iborat? Young Generation (Eden + 2 Survivor) va Old (Tenured) Generation.
### Nursery Space nima? Young Generation — yangi obyektlar yaratiladigan hudud (Eden + Survivor).
### Nursery Space haqidagi muhim fikrlar? Ko'pchilik obyektlar shu yerda tez o'ladi; Minor GC bu yerda tez-tez ishlaydi va tirik qolganlar Old ga ko'chiriladi.
### Tenured Space nima? Uzoq yashagan obyektlar ko'chiriladigan Old Generation hududi.
### Permanent Generation nima? Eski JVM (Java 7 gacha) da class metadata saqlanadigan hudud (PermGen).
### Metaspace nima? Java 8 dan PermGen o'rniga kelgan, class metadata-ni native xotirada saqlaydigan hudud.
### Method Area nima? Class tuzilmasi, static o'zgaruvchilar va method kodi saqlanadigan mantiqiy hudud (amalda Metaspace da bo'ladi).
### Method Parameters-ning turlarini ayting. Java-da faqat pass-by-value bor (reference qiymati ham value sifatida uzatiladi); shuningdek Variable Arguments (varargs).
### Passing by Value nima? Argument qiymatining nusxasi method ga uzatiladi.
### Passing by Reference nima? Obyekt havolasining o'zi uzatiladi va asl obyekt o'zgartiriladi (Java-da bunday emas).
### Java-da passing by reference bormi? Yo'q. Java har doim pass-by-value. Faqat reference qiymati nusxalanadi, shuning uchun obyekt ichini o'zgartirish mumkin, lekin havolaning o'zini emas.
### Variable Arguments nima? Method ga o'zgaruvchan sonli argument berish imkoni: `void f(int... nums)`.
### Garbage Collector nima va uning vazifasi? Reference qolmagan (ishlatilmayotgan) obyektlarni avtomatik topib, xotirani bo'shatuvchi mexanizm.
### JVM Garbage Collector qanday bosqichlarni o'z ichiga oladi? Mark (ishlatilayotganlarni belgilash) va Sweep (belgilanmaganlarni o'chirish); ba'zan Compact (siqish).
### Sweeping turlari qanday? Oddiy sweep, compacting sweep (bo'sh joylarni siqib xotirani tartiblaydi) va copying (Young Generation da nusxalash).
## Versiya va aniqlik Java misollari Java 17 bazasiga mo‘ljallangan. JDK/JRE paketlash usuli distributivga bog‘liq; JVM bayt-kodni interpretatsiya va JIT orqali bajarishi mumkin. GC uchun aniq bajarilish vaqtiga kafolat yo‘q; finalization resurs yopish usuli emas. Thread stop/suspend/resume kabi eski metodlar amaliy yechim emas. Koddagi import, klass yoki tashqi kutubxona kontekstini tekshiring.
## Manbalar [Moduldagi savollar yo‘nalishi](https://github.com/jlkesh/pdp_online_java_lessons/blob/main/interviewquestions/2-module.md) [Rasmiy qo‘llanma](https://dev.java/learn/classes-objects/) [Sizning avvalgi savol-javob arxivingiz](https://lightyer.uz/java/interview.html)
Kod quyida o‘quv namunasi sifatida berilgan. To‘liq ilova uchun import, dependency va konfiguratsiya kerak bo‘lishi mumkin. SQLni faqat ajratilgan test bazasida bajaring.
Kod misoli
Object first = new Object();
Object second = first;
first = null;
System.out.println(second != null); // true
// Obyektga second orqali hali erishish mumkin.
Keng tarqalgan xatolar
- Havolani `null` qilish obyektni darhol o'chiradi deb o'ylash: GC qachon ishlashini kafolatlab bo'lmaydi.
- StackOverflowError va OutOfMemoryError ni bir xil muammo deb hisoblash - biri stack, ikkinchisi heap.
Mashqlar
- Chuqur rekursiya yozib StackOverflowError ni ataylab chaqiring va stack trace ni o'qing.
- Katta ro'yxatni tsiklda to'ldirib, `-Xmx` ni kichraytirilgan holda ishga tushiring.
Teglar: pdp, modul-02, nazariya