2011-11-10 13 views
6

Jedna kwestia zastanawia się w mojej głowie od kilku ostatnich dni. Chcę wiedzieć, jak działa Garbage collecter z klasami statycznymi, zmiennymi?Kosz na śmieci i klasa statyczna, zmienna

Jak wszyscy wiemy, narzędzie do zbierania śmieci śledzi obiekty utworzone w aplikacji i usuwa je automatycznie, gdy nie są już używane. Dla klasy statycznej obiekt nie jest tworzony i jest ładowany do pamięci przy użyciu debugowania aplikacji.

Więc Garbage collector obsługuje klasy statyczne?

Odpowiedz

9

Klasy statyczne nie muszą być usuwane, ponieważ nie są obiektami i nie zużywają pamięci (oprócz faktycznego kodu klasy ładowanego przez infrastrukturę .NET). Z drugiej strony statyczne pola w statycznych klasach są obiektami, które zużywają pamięć. Nie zostaną zebrane, ponieważ są dostępne przez cały okres użytkowania aplikacji. Jeśli chcesz zwolnić pamięć, powinieneś ustawić pole na wartość null, aby obiekt, do którego wskazywało to pole, kwalifikował się do GC

+0

W porządku, chodzi o to, że Garbage collector nigdy zwalnia statyczne pola lub zmienne, co oznacza, że ​​są zawsze ładowane do pamięci. Czy w takim razie ma prawo powiedzieć, że statyczne powinny być tworzone tylko dla globalnej stałej lub zmiennych? –

+3

Istnieje wyjątek: w .Net 4 możesz mieć kolekcjonowalne złożenia. A jeśli zbiór jest zbiorem śmieci, statyczne pola typów w tym zespole przestają być pierwiastkami GC, więc obiekty, do których się odwołują, mogą być gromadzone. – svick

+0

@svick, co jest bardzo interesujące, dziękuję. Warto również zauważyć, że pola w klasach statycznych są wprowadzane, gdy klasa jest dostępna po raz pierwszy, a nie po uruchomieniu programu. – Stilgar

1

On nigdy ich nie zwolni. (na przykład w WEBu do czasu ponownego uruchomienia IIS).

Oni nigdy nie mówią: „Nikt nie odwołuje się do mnie tak, że jestem wolny, aby przejść”

również

nigdy nie można zrobić nowy do klasy statyczne .... więc jego zwyczaje jest tylko przez obiekt klasy (nie instancja).

Więc .net nie ryzykuje i nie ma go w GC.

+0

dzięki za przywrócenie royi, mam swój punkt –