Ho usato una variabile con molti dati, diciamo String data
. Volevo usare una piccola parte di questa stringa nel modo seguente:
this.smallpart = data.substring(12,18);
Dopo alcune ore di debug (con un visualizzatore di memoria) ho scoperto che il campo degli oggetti smallpart
ricordava tutti i dati data
, sebbene contenesse solo la sottostringa.
Quando ho cambiato il codice in:
this.smallpart = data.substring(12,18)+"";
..il problema è stato risolto! Ora la mia applicazione usa pochissima memoria ora!
Come è possibile? Qualcuno può spiegare questo? Penso che this.smallpart abbia continuato a fare riferimento ai dati, ma perché?
AGGIORNAMENTO: Come posso cancellare la stringa grande allora? Data = new String (data.substring (0,100)) farà la cosa?
new String(String)
; vedi stackoverflow.com/a/390854/8946 .