Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > JavaScript, Ajax
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.10.2010, 00:14   #1
sashonk
Форумчанин
 
Регистрация: 26.10.2009
Сообщений: 170
По умолчанию утечки памяти в javascript

Здравствуйте,
вот, озадачился написанием элемента управления на javascript по рабочей нужде и заинтересовался таким вопросом: какие конструкции в js будут приводить к утечкам памяти? Погуглив, узнал, что такое бывает, хотя не пойму: есть сборщик мусора, неиспользуемые объекты должны удаляться, с чего должна течь память? Просветите, пожалуйста
sashonk вне форума Ответить с цитированием
Старый 15.10.2010, 14:08   #2
sashonk
Форумчанин
 
Регистрация: 26.10.2009
Сообщений: 170
По умолчанию

хм...должно быть вопрос либо слишком сложный, либо мало занятный...определенно, одно из двух
sashonk вне форума Ответить с цитированием
Старый 15.10.2010, 21:48   #3
Виталий Желтяков
Старожил
 
Аватар для Виталий Желтяков
 
Регистрация: 19.04.2010
Сообщений: 2,702
По умолчанию

Цитата:
какие конструкции в js будут приводить к утечкам памяти?
Хаки клавиатуры, рекурсии, неправильное использование элементов управления например.
Цитата:
есть сборщик мусора, неиспользуемые объекты должны удаляться, с чего должна течь память?
Объекты могут удаляться, а вот незаконченные методы будут продолжать висеть.
Виталий Желтяков вне форума Ответить с цитированием
Старый 15.10.2010, 23:56   #4
motorway
Участник клуба
 
Регистрация: 28.06.2009
Сообщений: 1,950
По умолчанию

В целом, из-за ошибок программиста. Мне недавно пришлось встретиться с такой вещью, как увеличение числа вызовов функции в таймауте - функция начинала вызывать себя по несколько раз, в конце концов браузер подвисал.
motorway вне форума Ответить с цитированием
Старый 18.10.2010, 10:28   #5
sashonk
Форумчанин
 
Регистрация: 26.10.2009
Сообщений: 170
По умолчанию

ну, рекурсия - дело понятное. В любом языке программирования бесконечная рекурсия (или достаточно глубокая) приведет к outofmemory. (хотя формально это утечкой и не является)
Код:
незаконченные методы
я так понимаю это речь, собственно, о рекурсии идет.

Меня больше интересуют ситуации, при которых память отъедается объектами, с которыми программа уже не работает, но сборщик по какой-то причине не удалил объект, либо просто еще не успел. Скажем, будет ли достаточно грамотным код вида:
Код HTML:
var smth = new SomeObject({...});
smth = new SomeObject({...});
...
вот при таком раскладе, нужно ли после каждого new SomeObject, обнулять переменную smth, давая сборщику намек на удаление неиспользуемых объектов. Будет ли от этого какая-то выгода?
sashonk вне форума Ответить с цитированием
Старый 18.10.2010, 20:05   #6
Виталий Желтяков
Старожил
 
Аватар для Виталий Желтяков
 
Регистрация: 19.04.2010
Сообщений: 2,702
По умолчанию

У Вас не правильное представление о работе броузера.
БРОУЗЕР НЕ РАБОТАЕТ КАК ОС. ОН УДАЛЯЕТ ОБЪЕКТЫ, НО НЕ УБИВАЕТ ПРОЦЕССЫ, СОЗДАННЫЕ ОБЪЕКТОМ.
Ну, собственно от сюда все вытекающие... Если процесс не закончился и его результат используется в других функциях и броузере, то "убийство" создаёт потерянный процесс. Очень часто это возникает из-за неправильного ответа функции.
Объекты чистить полезно, т.к. большое количество объектов, даже неиспользуемых, замедляет работу.
Виталий Желтяков вне форума Ответить с цитированием
Старый 20.10.2010, 22:58   #7
sashonk
Форумчанин
 
Регистрация: 26.10.2009
Сообщений: 170
По умолчанию

Цитата:
У Вас не правильное представление о работе броузера.
БРОУЗЕР НЕ РАБОТАЕТ КАК ОС. ОН УДАЛЯЕТ ОБЪЕКТЫ, НО НЕ УБИВАЕТ ПРОЦЕССЫ, СОЗДАННЫЕ ОБЪЕКТОМ.
Ну, собственно от сюда все вытекающие... Если процесс не закончился и его результат используется в других функциях и броузере, то "убийство" создаёт потерянный процесс. Очень часто это возникает из-за неправильного ответа функции.
Объекты чистить полезно, т.к. большое количество объектов, даже неиспользуемых, замедляет работу.
о каких процессах, создаваемых объектами, вы говорите? js выполняется в единственном потоке и при чем тут процессы я не понимаю. поясните, пожалуйста, подробнее. Приведите пример, если можно
sashonk вне форума Ответить с цитированием
Старый 20.10.2010, 23:03   #8
sashonk
Форумчанин
 
Регистрация: 26.10.2009
Сообщений: 170
По умолчанию

Цитата:
В целом, из-за ошибок программиста. Мне недавно пришлось встретиться с такой вещью, как увеличение числа вызовов функции в таймауте - функция начинала вызывать себя по несколько раз, в конце концов браузер подвисал.
ну это дело понятное, но больше похоже на неэкономное расходование памяти, нежели на утечку.
sashonk вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Достали утечки памяти Порфирий Общие вопросы C/C++ 4 22.12.2009 11:32
javascript kettyrus Помощь студентам 1 03.10.2009 14:00
InterBase 7.1 - утечки памяти. pushkin42 БД в Delphi 2 21.03.2007 16:15