Sobes.tech
Middle

Кайда жыйноочу эмне жана ал кандай иштейт?

sobes.tech AI

AIден жооп

Чоңурак чогултуучу (Garbage Collector, GC) — бул автоматтык эс тутумду башкаруу механизми, ал программадан колдонулбай калган эс тутумду бөлүп, бошотуп турат.

Иштөө принциби:

  1. Эс тутумду бөлүү: Программа объекттерди түзгөндө, чоңурак чогултуучу алар үчүн орун бөлөт.
  2. Жеткиликтүүлүктү аныктоо: Чоңурак чогултуучу, кайсы объекттер "тамырлар" (root) аркылуу жеткиликтүү экенин аныктайт. Тамырлар — иштеп жаткан функциялардын жергиликтүү өзгөрмөлөрү, статикалык өзгөрмөлөр, жиптерден (threads) келген шилтемелер жана башка.
  3. Чогултуу: Тамырлардан жеткиликтүү эмес объекттер "кыймылсыз" деп эсептелет жана алардын эс тутуму бошотулушу мүмкүн.

Төрт түрдүү алгоритмдер бар, мисалы:

  • Mark-and-Sweep (Белгилөө жана тазалоо): Чогултуучу, тамырлардан жеткиликтүү объекттердин графин өтүп, белгилейт. Андан соң, бүтүндөй heap аркылуу өтүп, белгиленген объекттердин эс тутумун бошотот.
  • Көчүрүү: Heap эки бөлүккө бөлүнөт. Жеткиликтүү объекттер бир бөлүктөн экинчи бөлүккө көчүрүлөт, эски бөлүк тазаланады.
  • Генерациялык: Объекттер генерацияларга бөлүнөт. Жаңы объекттер жаш генерацияга, эскилер — жетилгенге киргизилет. Чогултуу көбүнчө жаш генерацияда болот, анткени көпчүлүк объекттер кыска өмүрлүү.

Javaда иштөө мисалы (жөнөкөйлөштүрүлгөн):

// Программа объекттерди heapте түзөт
Object obj1 = new Object();
Object obj2 = new Object();

// obj1 жеткиликтүү эмес болот
obj1 = null;

// Чогултуучу, obj1 тарабынан колдонулган эс тутумду бошотушу мүмкүн