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

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

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

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

18 ответов

28 просмотров

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта