169 похожих чатов

В func1() запускается Timer.periodic после его запуска функция завершается Но должная уничтожиться

перемнная msg, но нет, она продолждает эксплуатироваться ТамеромПереодик

А что если полсле myTimer.cancel() она останеться в памяти? Ведь у меня такие таймеры периодически запускаются и завершаются

18 ответов

6 просмотров

gc потом ее уберет

HhHhH- Автор вопроса
Kirill Bubochkin
gc потом ее уберет

как проверить что умерла она?

Посмотреть на код. Если надо прям убедиться – профилировать память.

HhHhH- Автор вопроса
Kirill Bubochkin
Посмотреть на код. Если надо прям убедиться – проф...

как глядя на код понять что перменная ещё существует

HhHhH
как глядя на код понять что перменная ещё существу...

Почитайте про замыкания. Колбэк таймера захватывает эту переменную. После того, как таймер остановится, колбэк будет не нужен, поэтому gc может всё собрать. Понятно, что в сложных случаях всё будет сложнее. Ну там уже и память иногда приходится профилировать, и утечки ловить.

HhHhH- Автор вопроса
Kirill Bubochkin
Почитайте про замыкания. Колбэк таймера захватывае...

Может глобальную переменную завести чтобы вдруг случайно не насоздавал тысячи таких переменных. Если тысячи раз вызывается func1

HhHhH
Может глобальную переменную завести чтобы вдруг сл...

Создавать глобальные переменные "на всякий случай" – очень плохая практика. Надо понимать, как работает код, а не делать на всякий случай. В конкретном случае со строкой, это вообще смешно. На каждый вызов build метода создаются инстансы виджетов, а это может происходить 120 раз в секунду. Представляете, сколько новых инстансов создается каждую секунду?

Кириллов Максим (Евстегней Чачлык)
Видишь cancel() значит переменная умерла

ну нет, на основании только этого делать выводы не стоит

Переменные уничтожаются в тот момент когда перестают использоваться. Жизненный цикл переменной не всегда связан с жизненным циклом функции

HhHhH- Автор вопроса
Royal Cat
Переменные уничтожаются в тот момент когда переста...

Ну 10сек в периодике не используется. Но не уничтожается

Royal Cat
Переменные уничтожаются в тот момент когда переста...

Не в этот же момент. Через какое-то время.

Это уже сложнее. Я не готов утверждать как конкретно работает очистка переменных в дарте, исходники не смотрел. Насколько помню большая часть переменных будет удалятся через счетчик ссылок, а локальные переменные функции все таки будут создаватся на стеке. В любом случае в тот момент когда с переменной пропали все ссылки правильно считать что её нет, внутренний алгоритм работы gc не так важен

Royal Cat
Это уже сложнее. Я не готов утверждать как конкрет...

> В любом случае в тот момент когда с переменной пропали все ссылки правильно считать что её нет Правильно для чего? С точки зрения потребления памяти, память всё еще занята. С т.з. того, что к ней уже нельзя обратиться – ну да.

HhHhH
как проверить что умерла она?

Есть финалайзеры) но никто не гарантирует что GC избавиться от мертвой памяти, так как у системы мб достаточно места чтобы GC лишний раз не отрабатывал

HhHhH- Автор вопроса

Вот вот. Чувствовал подвох

HhHhH
Вот вот. Чувствовал подвох

Ну если у тебя эмулятор ты можешь эмулировать нехватку памяти... Другое дело что если вовсе память кончится то при работе финалайзеры прила может упасть из за того что не сможет выделить память (тоже самое при перехвате проблемы StackOverflow, мы не можем обработать ошибку, так как стек переполнен)))

Похожие вопросы

Обсуждают сегодня

Anyone here suffers from unexplained aural migraines, who would be up for talking for a bit? Doesn't *have* to be aural, but I am not asking about headaches, I mean actual mi...
Martin Rys
55
Вопрос. Теоретический. Есть список команд. Команды отправляю в обработку некой функции, по очереди. Разные команды могут давать разные результаты после обработки. В зависимос...
Serjone
7
Привет, нужен совет старших товарищей. Есть глобальная переменная var DefaultDataFolder:string; инициализируем DefaultDataFolder:='a:\_OUT\'; есть примитивная процедур...
Max Otto
10
Всем вечера. Подскажите как лучше сделать. делаю на Д10 Например будет база данных на SQLite. в ней будет много таблиц. более 50шт Типа справочник. Содержать ID Name Id p...
Андрей Т 🐎
10
это группа токсиков или тех кто помогает?
Ибрагим
9
Я короче решил скомпилировать Nim в js, я думал он сработает как обычный транслятор. По итогу он мне создал файл с расширением js, и туда поместил кучу кода Вопрос, что это з...
𝕾𝖍𝖆𝖉𝖊 <suspense>
8
мы пытаемся подменить функцию, которая имеет меньше инструкций относительно функции, которой подменяем. https://www.reddit.com/r/jailbreakdevelopers/comments/w06ujy/mshookfun...
Óðinn
6
подскажите пожалуйста, как мне освободить результат записанный в переменную result? в чем проблема подскажите если МОЖЕТЕ?
Михаил Helper
28
Добрый день! Хочу спросить совета. Хочется в скрипт добавить некую конструкцию, что скрипт создал файл, который нужно потом скопировать в определенное место. Нашел такой сп...
Mikhail
4
я не магистр хаскеля, но разве не может лейзи тип конвертнуться в не-лейзи запросив вычисление содержимого прям при инициализации?
deadgnom32 λ madao
100
Карта сайта