Sobes.tech
Middle+

Дар бораи усулҳои кории ҷамъкунандаи партовҳо (Garbage Collector) нақл кунед.

sobes.tech AI

Ҷавоб аз AI

Ҷамъоварии партовҳо равандест автоматии идоракунии хотира, ки хотираро, ки аз ҷониби объектҳо ишғол шудааст, озод мекунад, ки дигар барои барнома истифода намешаванд.

Роҳҳои асосии кории ҷамъоварии партовҳо:

  1. Шумораи истинодҳо (Reference Counting):

    • Ҳар як объект шумораи истинодҳоро дорад, ки шумораи истинодҳоро ба он нигоҳ медорад.
    • Ҳангоми эҷоди истинод ба объект шумораи онро зиёд мекунад.
    • Ҳангоми нопадид шудани истинод (масалан, тағирёбанда аз доираи истифода хориҷ мешавад) шумораи онро кам мекунад.
    • Вақте ки шумораи онро ба сифр мерасонад, объект ҳамчун дастрас набуда ҳисобида мешавад ва хотираи он озод карда мешавад.
    • Масъалаҳо: Наметавонад истинодҳои циклӣ, ки ду ё бештар объект ба ҳам ишора мекунанд, аммо аз берун дастрас нестанд, кор кунад.
  2. Трассиркунии ҷамъоварии партовҳо (Tracing Garbage Collector):

    • Дар ду марҳила кор мекунад: нишонагузорӣ (marking) ва ҷамъоварӣ (sweeping) ё фишурдан (compacting).
    • Марҳилаи нишонагузорӣ: аз "худоҳо" (root set) оғоз мешавад - объектҳое, ки бехатар дастрасанд (масалан, тағирёбҳои глобалӣ, объектҳо дар стек). GC ҳамаи объектҳои дастрасро аз худоҳо мегузарад ва онҳоро ҳамчун "зинда" нишонагузорӣ мекунад.
    • Марҳилаи ҷамъоварӣ: GC тамоми кӯпрукро санҷида мебинад. Объектҳои нишонагузорӣ нашуда ҳамчун "хора" ҳисобида мешаванд ва хотираи онҳоро озод мекунад.
    • Марҳилаи фишурдан (ихтиёрӣ): Пас аз ҷамъоварӣ GC метавонад объектҳои "зинда"-ро ҷой ба ҷойи дигар гузаронад, то парчамро бартараф кунад.
    • Фоидаҳо: Мумкин аст циклӣ ишораҳоро коркард кунад.
    • Норасоиҳо: Мумкин аст дар иҷрои барнома (стоп-мир) паузаҳоро ба вуҷуд орад, то ки GC кор кунад.

Алгоритмҳои маъмултарини трассиркунии ҷамъоварии партовҳо:

  • Mark-and-Sweep: Объектҳои зиндаро нишонагузорӣ мекунад, пас хомӯш мекунад.
  • Mark-and-Compact: Объектҳои зиндаро нишонагузорӣ мекунад, пас онҳоро барои дефрагментация ҷойгир мекунад.
  • Copying: кӯпрукро ба ду қисм тақсим мекунад. Дар вақти ҷамъоварӣ GC объектҳои зиндаро аз як қисми ба қисми дигар кӯчонида, қисми аввалро озод мекунад.
  • Generational: Бар асоси гипотеза, ки бештари объектҳо ҷавон мемиранд. кӯпрук ба наслҳо тақсим мешавад (масалан, ҷавон ва кӯҳна). GC бештар хомӯш кардани партовҳоро дар насли ҷавон анҷом медиҳад, ки ба паузаҳоро кам мекунад.

Роҳи махсуси кории ҷамъоварии партовҳо вобаста ба забони барномасозии истифодашаванда ва иҷрои он мебошад. Масалан, Java ва C# намудҳои гуногуни ҷамъоварии партовҳоро истифода мебаранд, аз ҷумла, наслӣ. Python одатан ҳисобкунии истинодро бо механизми иловагӣ барои ошкор кардани ишораҳои циклӣ истифода мебурд, ва дар версияҳои навтар инчунин элементҳои ҷамъоварии трассиро истифода мебаранд.