Покинул форум
Сообщений всего: 329
Дата рег-ции: Апр. 2011
Помог: 7 раз(а)
Доброго времени суток!
Подскажите, плз, светлые головы! Насколько актуален в 2014 году вопрос утечек памяти в JS? Стал изучать проблему. Пока достаточно поверхностно, но вообще уже складывается ощущение, что код на js - это обильно засаженное минное поле. Чихнул - и потекло
С другой стороны практически все статьи об утечках памяти датируются где-то не позднее 2008 года. Вот я и задумался, а насколько актуальна тема? И если актуальна, то не поделится ли уважаемое сообсчество свежими ссылками где почитать о современном состоянии проблемы?
Заранее благодарен, и прочая, и прочая
Мелкий
Отправлено: 03 Февраля, 2014 - 17:51:46
Активный участник
Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009 Откуда: Россия, Санкт-Петербург
----- Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук
OrmaJever
Отправлено: 03 Февраля, 2014 - 20:44:10
Активный участник
Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010 Откуда: Чернигов
Помог: 299 раз(а)
Мелкий пишет:
Очень даже актуален.
Утечки памяти в js? Мир больше никогда не станет прежним
----- Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
MAXUS
Отправлено: 04 Февраля, 2014 - 06:03:11
Посетитель
Покинул форум
Сообщений всего: 329
Дата рег-ции: Апр. 2011
Помог: 7 раз(а)
Мелкий пишет:
Очень даже актуален. Я не слежу за фронтендом и то вижу материалы по этой теме.
Например, о яндекс.почте: http://habrahabr.ru/company/yandex/blog/195198/
Спасибо. Читал. (Добавление)
nerv пишет:
еще ссылка
http://learn[dot]javascript[dot]ru/memory-leaks
Это тоже читал. Но это старое. Вопрос насколько актуально. (Добавление)
Попробую вопрос конкретизировать.
то ноды зависнут и не удалятся. Верно, ведь рассуждаю? А другие подводные камни есть в примере? (Добавление)
nerv пишет:
В большинстве случаев этого будет достаточно, иногда избыточно) Чтобы работало, надо правильно писать код
Слушай, а поясни смысл этой конструкции. Т.е. я так понимаю, что ты расширяешь стандартный тип Object, добавляя туда функцию destroy, которая собирает все ключи объекта и удаляет их содержимое (ну и сами ключи тоже). И, насколько я понимаю, эту функцию надо вызывать вручную?
Просто ключи все равно собираются только с первого уровня, а если внутри этого объекта есть еще объекты, то с ними что будет? Тоже вручную? Или расчет на то, что они убьются при очистке первого уровня? В таком случае простым delete(нужный объект) это не решается?
Покинул форум
Сообщений всего: 4254
Дата рег-ции: Февр. 2011 Откуда: .kh.ua
Помог: 242 раз(а)
MAXUS, запускаете свой код на догое время и смотрите на состояние памяти. На глаз так никто отлавливать не будет.
OrmaJever
Отправлено: 04 Февраля, 2014 - 12:10:26
Активный участник
Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010 Откуда: Чернигов
Помог: 299 раз(а)
MAXUS пишет:
А чем вызвана ирония?
Интерпретатор должен следить за всем, и по-моему утечки памяти возможны только в компилируемых языках.
----- Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
MAXUS
Отправлено: 04 Февраля, 2014 - 12:37:37
Посетитель
Покинул форум
Сообщений всего: 329
Дата рег-ции: Апр. 2011
Помог: 7 раз(а)
IllusionMH пишет:
MAXUS, запускаете свой код на догое время и смотрите на состояние памяти. На глаз так никто отлавливать не будет.
Понятно... Я думал шаблоны утечек кто-нибудь выкупит сходу. (Добавление)
OrmaJever пишет:
MAXUS пишет:
А чем вызвана ирония?
Интерпретатор должен следить за всем, и по-моему утечки памяти возможны только в компилируемых языках.
А... Ну, тут все равно что говорить "чайник вскипел". В смысле, вскипает не чайник, а вода в нем Т.е. утечки в интерпретаторах, конечно, имеются в виду
IllusionMH
Отправлено: 04 Февраля, 2014 - 12:46:23
Активный участник
Покинул форум
Сообщений всего: 4254
Дата рег-ции: Февр. 2011 Откуда: .kh.ua
Помог: 242 раз(а)
MAXUS, всем безумно интересно изучать простыню кода на наличие возможных утечек.
Если не ошибаюсь, еще от движка может зависеть, так что точно не скажешь.
OrmaJever
Отправлено: 04 Февраля, 2014 - 12:57:19
Активный участник
Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010 Откуда: Чернигов
Помог: 299 раз(а)
MAXUS пишет:
Т.е. утечки в интерпретаторах, конечно, имеются в виду
Но тогда как это относится к коду, ну в смысле это грубо говоря баг в браузере, js кодом это не как не исправить, и смысл это обсуждать)))
----- Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
caballero
Отправлено: 04 Февраля, 2014 - 13:21:05
Активный участник
Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011 Откуда: Харьков
Помог: 126 раз(а)
разные функции и языковые конструкци по разному теряют память
иногда можно уменьшить если переписать код по другому
Запусти этот код. Потом в консоли вызови showStack(), увидишь, что ноды не удалились, поскольку присутствуют в стэке. Они просто открепились от документа, но остались в памяти. А вот если убрать функцию showStack(), то ноды и объект stack удалятся, что можно проверить в GC profile, сняв heap snapshot и во view "containment" проверить detached nodes... И это не вина браузера, а пример не верно составленного кода.
(Добавление)
nerv пишет:
MAXUS пишет:
В таком случае простым delete(нужный объект) это не решается?
решается. Разница только в том, что когда ссылок много проще так.
А еще правильней создавать объекты (экземпляры класса) через собственные конструкторы и прописывать деструкторы в них
Дак вот я и не пойму. Есть, например объект x. В твоем примере мы вызываем x.destroy() и запускаем функцию, которая убивает все ключи объекта, но не сам объект.
Во-первых, чем запись delete(x) сложнее, чем x.destroy()?
Во-вторых, объект-то у тебя не удаляется, а просто очищается. Если нужно очистить объект, то вместо delete(x) используем x={}, что быстрее, чем запускать функцию, которая перебирает ключи, согласись.
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.