No dobra, czyli obiekt statyczny sobie istnieje i tyle. A mi zużycie pamięci rośnie. Tak jakby coś nie było zwalniane.
No nie jest zwalniane, bo jest statyczne, @ŁF to chyba cztery razy powtórzył...
Wiem, że nie jest zwalniane, bo jest statyczne, ale dlaczego zużycie pamięci ciągle rośnie.
Masz problemy z czytaniem ze zrozumieniem. Nie jest zwalniane, bo jest statyczne i - prawdopodobnie - dlatego zużycie pamięci rośnie.
Ta składowa mimo, że jest statyczna:
Kopiuj
static public Something sth;
zawsze będzie miała rozmiar Something, więc zużycie pamięci nie powinno rosnąć.
Zauważ, że masz DWIE zmienne statyczne, pierwsza jest listą i o ile jej rozmiar nie będzie znacznie rosnąć, bo tylko trzyma referencje, o tyle przyczepione do niej obiekty (i całe drzewko siedzących w tych obiektach dalszych obiektów) będą siedzieć w pamięci tak długo, aż z tej listy nie zostaną usunięte.
Czy chcecie powiedzieć, że to co przypisuję do statycznej składowej nie jest usuwane?
Np.
Kopiuj
static public Something sth;
sth = new Something();
sth = new Something();
sth = new Something();
Czy powyższy kod powoduje, że w pamięci powstają trzy obiekty something? Czy dwa są usuwane z zostaje ostatni (jak jedno Something nadpisuje drugie to do tamtego nie ma już referencji).
Chcemy powiedzieć, że czytasz bez zrozumienia. Zgaduję, że to przez to, że brakuje Ci podstaw programowania obiektowego. W pamięci powstaną trzy obiekty (chyba, że kompilator to zoptymalizuje, ale nie sądzę), dwa po jakimś czasie zostaną zwolnione, bo referencja do nich ginie, trzeci będzie wisiał. Wiesz, co to jest referencja do obiektu? Rozumiesz, jak działa GC? Rozumiesz różnice pomiędzy zmienną statyczną a niestatyczną?