Sobes.tech
Middle

Խոսեք աղբի հավաքման մեթոդների մասին (Garbage Collector):

sobes.tech AI

Պատասխան AI-ից

Մաքրման մեթոդներ.

  • Reference Counting (Հղումների հաշվարկ): Ամեն օբյեկտ պահում է իր վրա հղումների հաշվիչը: Երբ հաշվիչը հասնում է զրոյի, օբյեկտը համարվում է աղբ և ջնջվում է:
    • Առավելություններ: Պարզ, չի խանգարում հիմնական ծրագրի գործարկմանը երկար ժամանակ:
    • Թերություններ: Չի կարող լուծել ցիկլային հղումները; պահանջում է լրացուցիչ տարածք յուրաքանչյուր օբյեկտում:
  • Tracing Garbage Collectors (Տեղեկատվական աղբի հավաքողներ): Սկսում են "արմատային" օբյեկտներից (օրինակ, ակտիվ փոփոխականներ, Stack) և ռեկուրսիվ անցնում բոլոր հասանելի օբյեկտները: Անհասանելի օբյեկտները համարվում են աղբ:
    • Տեղեկատվական աղբի հավաքման հիմնական ռազմավարությունները:
      • Mark and Sweep (Նշում և մաքառում):
        1. Mark (Նշում): Գրաֆի անցում և բոլոր հասանելի օբյեկտների նշում:
        2. Sweep (Մաքառում): Երկրորդ անցում և աննշան օբյեկտների հեռացում:
        • Թերություններ: Հիշողության ֆրագմենտացիա:
      • Mark and Compact (Նշում և կոմպակտացում):
        1. Mark (Նշում): Ինչպես նախորդում:
        2. Compact (Կոմպակտացում): Շարժում է կենդանի օբյեկտները, որպեսզի նրանք լինեն շարունակական, վերացնելով ֆրագմենտացիան:
        • Թերություններ: Ավելի բարդ, կարող է պահանջել ծրագրի գործարկման կանգառ:
      • Copying (Կոպիռում): Հիշողությունը բաժանված է երկու մասի, և յուրաքանչյուր հավաքում կենդանի օբյեկտները պատճենվում են մյուս մասում, իսկ հին մասը մաքրվում է:
        • Առավելություններ: Չի ունենա ֆրագմենտացիա, արագ հիշողության հատկացում:
        • Թերություններ: Պահանջում է երկու անգամ ավելի շատ հիշողություն:
  • Generational Garbage Collection (Գեներացիոն աղբի հավաքում): Հիմնված է այն հիպոտեզի վրա, որ մեծ մասը օբյեկտների ապրումը կարճ է:
    • Առավելություններ: Արդյունավետ, քանի որ մեծ մասը աշխատանքը կատարվում է երիտասարդ գեներացիայում:
    • Թերություններ: Պահանջում է հետևել հղումներին հին գեներացիայից դեպի երիտասարդ:

Օրինակներ լեզուների և նրանց GC:

  • Python: Reference Counting (ցիկլային հավաքում):
  • Java, C#: Գեներացիոն, Mark and Sweep, Mark and Compact, Copying:
  • Go: Concurrent, non-generational Mark and Sweep: