gc потом ее уберет
как проверить что умерла она?
Посмотреть на код. Если надо прям убедиться – профилировать память.
как глядя на код понять что перменная ещё существует
Почитайте про замыкания. Колбэк таймера захватывает эту переменную. После того, как таймер остановится, колбэк будет не нужен, поэтому gc может всё собрать. Понятно, что в сложных случаях всё будет сложнее. Ну там уже и память иногда приходится профилировать, и утечки ловить.
Может глобальную переменную завести чтобы вдруг случайно не насоздавал тысячи таких переменных. Если тысячи раз вызывается func1
Видишь cancel() значит переменная умерла
Создавать глобальные переменные "на всякий случай" – очень плохая практика. Надо понимать, как работает код, а не делать на всякий случай. В конкретном случае со строкой, это вообще смешно. На каждый вызов build метода создаются инстансы виджетов, а это может происходить 120 раз в секунду. Представляете, сколько новых инстансов создается каждую секунду?
ну нет, на основании только этого делать выводы не стоит
Переменные уничтожаются в тот момент когда перестают использоваться. Жизненный цикл переменной не всегда связан с жизненным циклом функции
Ну 10сек в периодике не используется. Но не уничтожается
Не в этот же момент. Через какое-то время.
Потому что переменная все еще используется
Это уже сложнее. Я не готов утверждать как конкретно работает очистка переменных в дарте, исходники не смотрел. Насколько помню большая часть переменных будет удалятся через счетчик ссылок, а локальные переменные функции все таки будут создаватся на стеке. В любом случае в тот момент когда с переменной пропали все ссылки правильно считать что её нет, внутренний алгоритм работы gc не так важен
> В любом случае в тот момент когда с переменной пропали все ссылки правильно считать что её нет Правильно для чего? С точки зрения потребления памяти, память всё еще занята. С т.з. того, что к ней уже нельзя обратиться – ну да.
Есть финалайзеры) но никто не гарантирует что GC избавиться от мертвой памяти, так как у системы мб достаточно места чтобы GC лишний раз не отрабатывал
Вот вот. Чувствовал подвох
Ну если у тебя эмулятор ты можешь эмулировать нехватку памяти... Другое дело что если вовсе память кончится то при работе финалайзеры прила может упасть из за того что не сможет выделить память (тоже самое при перехвате проблемы StackOverflow, мы не можем обработать ошибку, так как стек переполнен)))
Обсуждают сегодня