Middle
Chiqindilarni yig'ish usullari (Garbage Collector) haqida gapiring.
sobes.tech AI
AIdan javob
Qoldirish usullari:
- Havola soni (Reference Counting): Har bir obyekt o'ziga havola sonini saqlaydi. Son nolga teng bo'lsa, obyekt axlat sifatida hisoblanadi va o'chiriladi.
- Afzalliklar: Oddiy, asosiy dastur ishini uzoq vaqt to'xtatmaydi.
- Kamchiliklar: Tsiklik havolalarni boshqara olmaydi; har bir obyektda qo'shimcha joy talab qiladi.
- Qoldiq yig'uvchilar (Tracing Garbage Collectors): "O'tin" obyektlar to'plamidan boshlanadi (masalan, faol o'zgaruvchilar, chaqiriq steki) va bu ildizlardan kiradigan barcha obyektlarni rekursiv tarzda o'tadi. Muvaffaqiyatsiz obyektlar axlat hisoblanadi.
- Asosiy izlash strategiyalari:
- Belgilash va tozalash (Mark and Sweep):
- Belgilash (Mark): Obyekt grafigini o'tib, barcha kiradigan obyektlarni belgilash.
- Tozalash (Sweep): Ikkinchi o'tishda, belgilamagan obyektlarni o'chirish.
- Kamchiliklar: Xotira bo'laklanishi.
- Belgilash va siqish (Mark and Compact):
- Belgilash (Mark): Mark and Sweep bilan bir xil.
- Siqish (Compact): Yashirin obyektlarni harakatlantirib, ularni ketma-ket joylashtirish, bo'laklanishni bartaraf etish.
- Kamchiliklar: Ko'proq murakkab, dastur to'xtashini talab qilishi mumkin.
- Ko'chirish (Copying): Xotirani ikki qismga bo'linadi (yarm-holatlar). Har bir yig'ishda, bir qismdagi yashirin obyektlar ikkinchisiga ko'chiriladi. Eski qism to'liq tozalanadi.
- Afzalliklar: Bo'laklanmaslik, yig'ishdan keyin tez xotira ajratish.
- Kamchiliklar: Ikki barobar ko'p xotira talab qiladi.
- Belgilash va tozalash (Mark and Sweep):
- Asosiy izlash strategiyalari:
- Avlodli qoldiq yig'ish (Generational Garbage Collection): Ko'p obyektlar qisqa umrli bo'lishi mumkinligi gipotezasiga asoslangan. Xotira avlodlarga bo'linadi (yosh, qari). Ob'ektlar yaratishda yosh avlodga joylashtiriladi. Agar obyekt yosh avlodda bir nechta yig'ishda yashab o'tsa, u qari avlodga o'tkaziladi. Yosh avlodda yig'ishlar ko'proq bo'lib o'tadi.
- Afzalliklar: Samarali, chunki katta qismi yosh avlodda amalga oshiriladi va kam ma'lumot bilan ishlashadi.
- Kamchiliklar: Qari avlodlardan yosh avlodlarga havolalarni kuzatish talab qilinadi (ro'yxat kartalari yoki boshqa mexanizmlar).
Dasturlash tillari va ularning GC misollari:
- Python: Reference Counting (tsiklik havolalar uchun tsiklik yig'ish bilan).
- Java, C#: Generational, Mark and Sweep, Mark and Compact, Ko'chirish (versiya va sozlamalarga qarab turli xil variantlar va kombinatsiyalar).
- Go: Konkurrent, avlodsiz, Mark and Sweep optimizatsiyalari bilan.