JVM, xotira va Garbage Collector
Daraja: Ilg'or
JVM xotirani ikkiga bo'ladi: Stack (har oqimning o'z lokal o'zgaruvchilari, tez) va Heap (barcha obyektlar, umumiy). Garbage Collector heap'dagi murojaat qilinmaydigan obyektlarni avtomatik tozalaydi. Xotira sizishi (memory leak) Java'da ham bo'ladi — keraksiz obyektga havola ushlab turilsa GC uni tozalay olmaydi.
Tushuntirish
JVM xotirani ikkiga bo'ladi: Stack (har oqimning o'z lokal o'zgaruvchilari, tez) va Heap (barcha obyektlar, umumiy). Garbage Collector heap'dagi murojaat qilinmaydigan obyektlarni avtomatik tozalaydi. Xotira sizishi (memory leak) Java'da ham bo'ladi — keraksiz obyektga havola ushlab turilsa GC uni tozalay olmaydi.
Kod misoli
// Stack: lokal o'zgaruvchi
int x = 5;
// Heap: obyekt
List<String> ro = new ArrayList<>();
// Havolani uzsak, GC tozalashi mumkin bo'ladi
ro = null;
// Foydali flaglar:
// java -Xms256m -Xmx1g -XX:+UseG1GC Main
// java -XX:+PrintGCDetails Main
Keng tarqalgan xatolar
- `System.gc()` chaqirish — bu faqat taklif, kafolat emas va odatda zarar qiladi.
- Static kolleksiyaga to'xtovsiz element qo'shish — klassik memory leak.
Mashqlar
- -Xmx ni juda kichik qilib OutOfMemoryError'ni ataylab chaqir.
- Katta ro'yxat yaratib, havolani uzib, xotira o'zgarishini kuzat.
Teglar: gc, xotira, jvm