Middle+
JVMda xotira qanday tuzilgan?
sobes.tech AI
AIdan javob
JVM xotirasi quyidagi ma'lumotlar sohalariga bo'lingan:
- Heap (Yig'indi): Klass va massiv obyektlari saqlanadigan xotira sohasidir. Barcha oqimlar uchun umumiy. Garbage Collector tomonidan boshqariladi. Avlodlardan iborat (Young, Old, Permanent/Metaspace).
- Stack (Stack): Har bir JVM oqimi uchun xotira sohasidir. Mahalliy o'zgaruvchilar, metod parametrlar va har bir metod chaqiruvi uchun stack ramkasi ma'lumotlarini saqlaydi. Metod tugagach, uning ramkasi stackdan olib tashlanadi.
- Method Area (Metodlar sohas): Klasslarning metama'lumotlarini saqlaydi: metod bytecode'lari, konstantalar havzasi, statik o'zgaruvchilar. Eski JVM versiyalarida Permanent Generation deb atalgan, yangi (Java 8+) Metaspace bilan almashtirilgan.
- PC Registers (Buyruqlar hisoblagichi registrlari): Har bir JVM oqimi uchun. JVM ning keyingi bajariladigan buyruq manzilini saqlaydi.
- Native Method Stacks (Nativ metodlar stacki): Nativ (Java bo'lmagan) metod chaqiruvlarini saqlaydi. Ular ilova chaqiradigan nativ kutubxonalarni ishlatadi.
Heapdagi xotira boshqaruvi Garbage Collector (GC) tomonidan amalga oshiriladi. U faol bo'lmagan referenslarga ega bo'lgan obyektlardan xotirani avtomatik ravishda ozod qiladi.
Heap va Stack bilan ishlash misoli:
// 'obj' obyekti Heapda yaratiladi.
Object obj = new Object();
// Mahalliy o'zgaruvchi 'i' oqimning stackida saqlanadi.
int i = 10;
public void myMethod(int param) { // param parametr bu metod ramkasining stackida.
// Mahalliy o'zgaruvchi 'local' bu metod ramkasining stackida.
String local = "hello";
// Yangi obyekt Heapda yaratiladi. Uning referensi bu metod ramkasining stackida.
MyClass myObj = new MyClass();
}
Heap va Stack o'rtasidagi farqlar:
- Heap: Barcha oqimlar uchun umumiy, obyektlarni saqlaydi, GC tomonidan boshqariladi.
- Stack: Yagona oqimga tegishli, primitiv turlar va obyektlarga referenslarni saqlaydi, metod ramkalar tomonidan boshqariladi.
JVMda xotira boshqaruvi quyidagilarni o'z ichiga oladi:
- Ob'ektlar yaratishda xotira ajratish (Allocation).
- Foydalanilmaydigan obyektlarning xotirasini bo'shatish (Deallocation, garbage collection).
- Xotira foydalanishini optimallashtirish.