Sobes.tech
Junior

Ի՞նչ է գարշահավաքը (Garbage Collector) C#-ում։

sobes.tech AI

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

Ավտոմատ հիշողության կառավարումի մեխանիզմ, որը ազատում է այն հիշողությունը, որը զբաղեցրած է օբյեկտների կողմից, որոնց վրա այլ հղումներ չկան։ Սա կանխում է հիշողության արտահոսքերը և պարզեցնում է զարգացման գործընթացը։

Ճարպային հավաքիչի աշխատանքային սկզբունքները՝

  1. Օբյեկտների հետևում: Հստակեցնում է այն օբյեկտները, որոնք դեռ հասանելի են ռուտային հանգույցներից (ստատիկ դաշտեր, տեղական փոփոխականներ ստեկում):
  2. Ճարպային հավաքում: Եթե օբյեկտի վրա հղումներ չկան, ապա հավաքիչը նշում է այն հեռացման համար:
  3. Հիշողության ազատում: Ազատում է այն հիշողությունը, որը զբաղեցրած է հեռացված օբյեկտներով, և սեղմում մնացած հիշողությունը՝ նվազեցնելու համար ֆրագմենտացիան:

Օբյեկտների սերունդները՝

  • 0-րդ սերունդ: Ունեցում է վերջերս ստեղծված, կարճաժամկետ օբյեկտներ։ Հավաքումը հաճախ է տեղի ունենում։
  • 1-ին սերունդ: Ունեցում է այն օբյեկտներ, որոնք անցել են 0-րդ սերունդի հավաքումը։ Հավաքումը ավելի հազվադեպ է։
  • 2-րդ սերունդ: Ունեցում է երկարաժամկետ օբյեկտներ։ Հավաքումը հազվադեպ է։

Պայմանական GC կանչ (նվազ օգտագործվում է և զգուշությամբ).:

// Պայմանական հավաքիչի կանչ
System.GC.Collect();
// Վերահսկում՝ սպասել մինչև վերջացնողների ավարտը
System.GC.WaitForPendingFinalizers();

.NET-ում հիմնական հավաքիչի մեխանիզմը նշման և սեղմման ալգորիթմն է։