Скажімо, я використовував змінну з великою кількістю даних String data
. Я хотів використати невелику частину цього рядка таким чином:
this.smallpart = data.substring(12,18);
Через кілька годин налагодження (за допомогою візуалізатора пам'яті) я з'ясував, що поле об'єктів smallpart
запам'ятовувало всі дані з data
, хоча воно містило лише підрядку.
Коли я змінив код на:
this.smallpart = data.substring(12,18)+"";
..блема була вирішена! Зараз у моєму додатку використовується дуже мало пам’яті!
Як це можливо? Хтось може це пояснити? Я думаю, що це.smallpart продовжував посилатися на дані, але чому?
ОНОВЛЕННЯ: Як тоді я можу очистити велику струну? Чи зроблять дані = нова строка (data.substring (0,100))?
new String(String)
; див. stackoverflow.com/a/390854/8946 .