Дата уничтожения объекта
Мне нужен совет по этому коду:
Thread myClock = new Thread() {
@Override
public void run() {
try {
while (!isInterrupted()) {
Thread.sleep(1000);
runOnUiThread(new Runnable() {
@Override
public void run() {
Date dt = new Date();
SimpleDateFormat myClockDate = new SimpleDateFormat("EEE, dd MMM yyyy");
SimpleDateFormat myClockTime = new SimpleDateFormat("hh:mm aa");
myClock_date.setText("Date: " + myClockDate.format(dt));
myClock_time.setText("Time: " + (myClockTime.format(dt)).replace(".", ""));
}
});
}
} catch (InterruptedException e) {
}
}
};
Это работает хорошо, но когда поток работает, монитор памяти показывает постоянный рост и падение использования. Когда он не работает, монитор ровный.
Я задаюсь вопросом, что является причиной непрерывного создания объекта даты? Нужно ли его уничтожать или освобождать?
PS: монитор GPU был отключен.
1 ответ
Каждую секунду ваш код создает объекты Runnable, Date и два DateFormat. Также строковые операции могут создавать некоторые объекты. После того, как Runnable заканчивается, они освобождаются (ничто за пределами Runnable не имеет ссылки ни на одну из них) и может быть использовано для сбора мусора. Вам не нужно ничего делать дальше, чтобы освободить их память. вы должны увидеть, что использование памяти вернется на тот же уровень после завершения каждого из этих Runnables.
Сборка мусора не немедленная. Пока вы не видите продолжающегося восходящего тренда, это нормально.