Witam, mam problem z tym co w temacie. Każdy obiekt, który nie będzie więcej potrzebny kończę dispose(), mimo to, pamięć tylko rośnie (czasem tylko spada minimalnie).
Zrobiłem testowy prosty program. 2 klasy:
-JFrame z guzikiem
-JFrame z labelem.
po naciśnięciu na guzik pierwszego JFrame'a, przez randoma losuje się liczba, przerabia przez String.valueOf() na Stringa, i podaje go do konstruktora drugiego JFrame'a, a on daje go jako wartość swojego labela. Domyślna akcja na 'krzyżyk' drugiego Frame'a, to dispose(). Teraz po prostu odpaliłem to, sprawdziłem jaką pamięć zużywa program na początku (ok. 17000K - faza początkowa), nacisnąłem na guzik ze 100 razy (w tym momencie ok. 22000K), wyłączyłem wszystkie okna (tak, znowu 100 kliknięć), efekt w menedżerze: ok. 21000K - faza końcowa. (poczekałem jeszcze kilkanaście minut, na przemian minimalnie rósł i malał, ciągle jednak mniej więcej było tyle samo). Teraz tak: to bardzo prosty program, więc nawet po wywołaniu dużej liczby okien, zmiana w pamięci (w menedżerze zadań) będzie niewielka, ale sam fakt jej WZROSTU względem fazy początkowej a fazy końcowej (gdzie jakby liczba istniejących obiektów jest taka sama [jeden JFrame z buttonem], ew. dodatkowe 2 zmienne [losowany int i String przekazywany do konstruktora drugiego JFrame'a]) w większych aplikacjach (np. mojej, o której wspominałem na początku posta) wpływa na dość istotne wartości w nieużywanej pamięci. Jak temu zapobiec? Obiekt, który kończę przez 'dispose()' nie jest potencjalnym celem dla gc? Mogę jakoś zwalniać pamięć?