Wpis z mikrobloga

Mam problem ze zrozumieniem Garbage Collectora w c#. Napisałem taki kod:

static void Main(string[] args){
while(true){
const int size=2000000;
int[] arr=new int[size];
Thread.Sleep(1000);
}
}

Debugując go w Visual Studio dostaje taki wykres zużycia pamięci jak poniżej. Te żółte trójkąty to wywołania GC. Doskonale rozumiem skąd biorą się wywołania w momencie w punktach przegięcia, natomiast nie rozumiem po co jest on wywoływany chwilę później skoro i tak nic nie robi.

#csharp #dotnet #programowanie
t.....r - Mam problem ze zrozumieniem Garbage Collectora w c#. Napisałem taki kod:

...

źródło: comment_B4Vc0FGP3MyPyOBVOjVGrQ2vGmdXUk1t.jpg

Pobierz
  • 9
  • Odpowiedz
konto usunięte via Wykop Mobilny (Android)
  • 0
@n3xo: W sensie, ze pierwszy zwalnia, a drugi przerzuca do wyzszych generacji? Bo po najechaniu myszką pokazuje mi, ze to juz jest gen2 (prawdopodobnie ze względu na rozmiar).
  • Odpowiedz
@teaperr: Specjalistą nie jestem ale bardziej bym obstawiał sprawdzenie czy pierwsze wywołanie zdarzyło zwolnić wszystkie poprzednie i jeśli nie to awansować je wyżej.
  • Odpowiedz
@teaperr: zaznaczam, że to moje zgadywanki ale patrząc na ten kod to GC pewnie zagląda do LOH-u - Large Objects Heap
Duże obiekty powyżej 85 k trzymane są w innym miejscu pamięci niż małe(SOH) i są generacji 2 i są tam trochę inne strategie czyszczenia pamięci, czyli raczej nie szuka obiektów Generacji 0 bo jak się zabrał za Gen2 to Gen0 już nie ma
Pogooglaj sobie o "Large Objects Heap Allocation
  • Odpowiedz