Middle
Խոսեք աղբի հավաքման մեթոդների մասին (Garbage Collector):
sobes.tech AI
Պատասխան AI-ից
Մաքրման մեթոդներ.
- Reference Counting (Հղումների հաշվարկ): Ամեն օբյեկտ պահում է իր վրա հղումների հաշվիչը: Երբ հաշվիչը հասնում է զրոյի, օբյեկտը համարվում է աղբ և ջնջվում է:
- Առավելություններ: Պարզ, չի խանգարում հիմնական ծրագրի գործարկմանը երկար ժամանակ:
- Թերություններ: Չի կարող լուծել ցիկլային հղումները; պահանջում է լրացուցիչ տարածք յուրաքանչյուր օբյեկտում:
- Tracing Garbage Collectors (Տեղեկատվական աղբի հավաքողներ): Սկսում են "արմատային" օբյեկտներից (օրինակ, ակտիվ փոփոխականներ, Stack) և ռեկուրսիվ անցնում բոլոր հասանելի օբյեկտները: Անհասանելի օբյեկտները համարվում են աղբ:
- Տեղեկատվական աղբի հավաքման հիմնական ռազմավարությունները:
- Mark and Sweep (Նշում և մաքառում):
- Mark (Նշում): Գրաֆի անցում և բոլոր հասանելի օբյեկտների նշում:
- Sweep (Մաքառում): Երկրորդ անցում և աննշան օբյեկտների հեռացում:
- Թերություններ: Հիշողության ֆրագմենտացիա:
- Mark and Compact (Նշում և կոմպակտացում):
- Mark (Նշում): Ինչպես նախորդում:
- Compact (Կոմպակտացում): Շարժում է կենդանի օբյեկտները, որպեսզի նրանք լինեն շարունակական, վերացնելով ֆրագմենտացիան:
- Թերություններ: Ավելի բարդ, կարող է պահանջել ծրագրի գործարկման կանգառ:
- Copying (Կոպիռում): Հիշողությունը բաժանված է երկու մասի, և յուրաքանչյուր հավաքում կենդանի օբյեկտները պատճենվում են մյուս մասում, իսկ հին մասը մաքրվում է:
- Առավելություններ: Չի ունենա ֆրագմենտացիա, արագ հիշողության հատկացում:
- Թերություններ: Պահանջում է երկու անգամ ավելի շատ հիշողություն:
- Mark and Sweep (Նշում և մաքառում):
- Տեղեկատվական աղբի հավաքման հիմնական ռազմավարությունները:
- Generational Garbage Collection (Գեներացիոն աղբի հավաքում): Հիմնված է այն հիպոտեզի վրա, որ մեծ մասը օբյեկտների ապրումը կարճ է:
- Առավելություններ: Արդյունավետ, քանի որ մեծ մասը աշխատանքը կատարվում է երիտասարդ գեներացիայում:
- Թերություններ: Պահանջում է հետևել հղումներին հին գեներացիայից դեպի երիտասարդ:
Օրինակներ լեզուների և նրանց GC:
- Python: Reference Counting (ցիկլային հավաքում):
- Java, C#: Գեներացիոն, Mark and Sweep, Mark and Compact, Copying:
- Go: Concurrent, non-generational Mark and Sweep: