Sobes.tech
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):
        1. Belgilash (Mark): Obyekt grafigini o'tib, barcha kiradigan obyektlarni belgilash.
        2. Tozalash (Sweep): Ikkinchi o'tishda, belgilamagan obyektlarni o'chirish.
        • Kamchiliklar: Xotira bo'laklanishi.
      • Belgilash va siqish (Mark and Compact):
        1. Belgilash (Mark): Mark and Sweep bilan bir xil.
        2. 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.
  • 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.