Powiedzmy, że użyłem zmiennej z dużą ilością danych String data
. Chciałem użyć niewielkiej części tego ciągu w następujący sposób:
this.smallpart = data.substring(12,18);
Po kilku godzinach debugowania (za pomocą wizualizatora pamięci) dowiedziałem się, że pole obiektów smallpart
zapamiętało wszystkie dane data
, chociaż zawierało tylko podłańcuch.
Kiedy zmieniłem kod na:
this.smallpart = data.substring(12,18)+"";
..problem został rozwiązany! Teraz moja aplikacja zużywa teraz bardzo mało pamięci!
Jak to możliwe? Czy ktoś może to wyjaśnić? Wydaje mi się, że to. Mała część ciągle odnosiła się do danych, ale dlaczego?
AKTUALIZACJA: Jak mogę zatem wyczyścić duży Ciąg? Czy dane = nowy ciąg (data.substring (0,100)) to zrobi?
new String(String)
; patrz stackoverflow.com/a/390854/8946 .