Middle
Чыгымдарды чогултуу ыкмалары (Garbage Collector) жөнүндө айтып бериңиз.
sobes.tech AI
AIден жооп
Мусулдарды чогултуу ыкмалары:
- Reference Counting (Сылтамалар саноо): Ар бир объект өзүнө сылтамалар санын сактайт. Сан нөлгө жеткенде, объект мусор деп эсептелип, өчүрүлөт.
- Артыкчылыктары: Жөнөкөй, негизги программа ишин узак убакытка бөгөттөбөйт.
- Кемчиликтери: Циклик шилтемелерди иштетпейт; ар бир объектте эсептегич үчүн кошумча орун талап кылынат.
- Tracing Garbage Collectors (Трассалоочу мусор чогултуучулар): "Көңүл буруу" объекттерден (мисалы, активдүү өзгөрмөлөр, стек) баштап, бул кореньдерден жеткиликтүү бардык объекттерди рекурсивдүү карайт. Жеткиликтүү эмес объекттер мусор деп эсептелет.
- Тасвирдөө стратегиялары:
- Mark and Sweep (Белги жана тазалоо):
- Mark (Белги): Объект графын карап, жеткиликтүү бардык объекттерди белгилөө.
- Sweep (Тазалоо): Экинчи өтүү менен белгиленбеген объекттерди жок кылуу.
- Кемчиликтери: Эстутумдун бөлүнүшү.
- Mark and Compact (Белги жана компакттоо):
- Mark (Белги): Mark and Sweep сыяктуу.
- Compact (Компакттоо): Жаш объекттерди жылдырып, үзгүлтүксүз жайгаштырып, бөлүнүүнү жоюу.
- Кемчиликтери: Көбүрөөк кыйын, программаны токтотуусу мүмкүн.
- Copying (Көчүрүү): Эстутумду эки бөлүккө бөлүү (жарым кеңдиктер). Мусор чогултуу учурунда, жаш объекттер бир бөлүктөн экинчи бөлүккө көчүрүлөт, андан кийин эски бөлүк толугу менен тазаланады.
- Артыкчылыктары: Бөлүнүү жок, тезирээк жады бөлүштүрүү.
- Кемчиликтери: Эки эсе көп жад талап кылынат.
- Mark and Sweep (Белги жана тазалоо):
- Тасвирдөө стратегиялары:
- Generation Garbage Collection (Генерациялык мусор чогултуу): Көпчүлүк объекттер кыска жашайт деген гипотезага негизделген. Жады жаш жана карыган деп бөлүнөт. Объекттер түзүлгөндө жаш геноного жайгаштырылат. Эгер объект "жашайт" бир нече мусор чогултууда, ал карыган геноно которулат. Жас геноно көбүрөөк чогултулат.
- Артыкчылыктары: эффективдүү, көбүнчө жаш геноно иштейт.
- Кемчиликтери: Карталар аркылуу шилтемелерди көзөмөлдөө талап кылынат.
Тилдер жана алардын GC мисалдары:
- Python: Reference Counting (циклдер менен чогултуу).
- Java, C#: Генерациялык, Mark and Sweep, Mark and Compact, Copying.
- Go: Конкурент, генерациялык эмес Mark and Sweep.