Javascript: Как идентифицировать утечки памяти? [Дубликат]

Вы не можете изменить манифест или ресурс в подписанном и закрытом APK, за исключением обновления программного обеспечения.

45
задан JoeDred 15 September 2015 в 13:26
поделиться

6 ответов

Google open sourced инструмент для этой цели, поиск утечек для javascript. Они также предложили метод, так называемый метод трех снимков (см. Также краткое описание в этой статье).

leak-finder-for-javascript

Примечание: jsleakcheck больше не поддерживается! Он работал против неофициального и нестабильного протокола Dev Tools для получения снимков кучи. Протокол обрабатывается, и он недостаточно стабилен, поэтому я могу поддерживать jsleakcheck, работая с различными версиями Chrome. Кроме того, был удален инструмент совместимости с более низким уровнем, remote_inspector_client.py, который jsleakcheck использовал для связи с Dev Tools.
16
ответ дан Hardik Mishra 15 August 2018 в 14:14
поделиться
  • 1
    На странице поиска утечек-для-javascript в настоящее время есть большое замечание, в котором говорится, что он больше не поддерживается. – Burhan Ali 7 August 2014 в 15:02
  • 2
    Новая ссылка будет в порядке. – Scheintod 12 January 2015 в 21:04

Я нашел эту статью очень проницательной:

http://addyosmani.com/blog/taming-the-unicorn-easing-javascript-memory-profiling-in-devtools/

Он широко раскрывает инструменты для разработчиков Chrome и очень хорошо объясняет, как это происходит, когда у вашего приложения возникают проблемы с памятью.

7
ответ дан bennidi 15 August 2018 в 14:14
поделиться

Теперь Chrome предлагает гораздо лучшие инструменты для поиска утечек памяти, чем во время большинства ответов.

Здесь вы найдете утечки памяти в javascript с недавним браузером Chrome:

Нажмите F12, чтобы открыть инструменты разработчика и перейдите на вкладку «Память».

Нажмите F12, чтобы открыть инструменты разработчика и перейдите на вкладку «Память». Выполните действие (например, открыв диалоговое окно), которое вы хотите проверить утечки памяти один раз, поэтому потенциальные глобальные службы могут быть загружены. Это предотвращает появление этих объектов, которые намеренно сохраняются как утечки. Теперь выберите «Временная шкала распределения записи» и нажмите «Пуск». Повторите действие, которое вы хотите проверить на наличие утечек несколько раз. Так, например, откройте диалоговое окно, закройте его и повторите. Пока вы делаете это, Chrome рисует временную шкалу с частично серыми или синими полосами. Обычно вы видите панель каждый раз, когда вы выполняете действие на своей странице. Когда панель из нескольких предыдущих итераций действия остается частично синей, обычно это означает, что происходит утечка памяти. Синяя часть панели представляет собой память, которая была выделена в это время и еще не выпущена. Остановите запись, нажав красную точку в левом верхнем углу инструментов разработчика.

Выполните действие (например, открытие диалога), которое вы хотите проверить на утечку памяти один раз, чтобы можно было загружать потенциальные глобальные сервисы , Это предотвращает обнаружение этих объектов, которые намеренно сохраняются в виде утечек.

Chrome Developer Tools - Memory Tab [!d8]

Выполните действие (например, открытие диалог), вы хотите проверить утечку памяти один раз, чтобы можно было загружать потенциальные глобальные сервисы. Это предотвращает обнаружение объектов, которые намеренно сохраняются как утечки.

Теперь выберите «Временная шкала распределения записи» и нажмите «Пуск». Повторите действие, которое вы хотите проверить на наличие утечек несколько раз. Так, например, откройте диалоговое окно, закройте его и повторите. Пока вы делаете это, Chrome рисует временную шкалу с частично серыми или синими полосами. Обычно вы видите панель каждый раз, когда вы выполняете действие на своей странице. Когда панель из нескольких предыдущих итераций действия остается частично синей, обычно это означает, что происходит утечка памяти. Синяя часть панели представляет собой память, которая была выделена в это время и еще не выпущена. Остановите запись, нажав красную точку в левом верхнем углу инструментов разработчика.

Список фиксаторов показывает «родительские» объекты, которые ссылаются на выбранный объект. Теперь вам нужно посмотреть на фиксаторы и ваш код, чтобы понять, почему память не была выпущена. Например, на изображении вы видите объект области видимости. Во второй строке указано, что область - это «контекст в initFormat ()». Проблема заключалась в том, что initFormat был прослушивателем событий, который не был отключен после того, как был оставлен диалог.

Иногда есть кеши, которые сохраняют часть памяти. Обычно вы можете игнорировать их. Когда вы видите, что HTMLDivElement или другие элементы DOM в списке типов объектов выглядят. Если объекты в этом списке выделены красным цветом, это означает, что они больше не присутствуют на вашей странице. Это означает, что они должны быть ссылкой где-то в коде. Возможно, вы забыли отключить прослушиватель событий. Прочитайте об утечках памяти в целом, чтобы вы могли быстрее идентифицировать их в своем коде.
23
ответ дан MrJingles87 15 August 2018 в 14:14
поделиться
  • 1
    Почему вы говорите, что кэши можно игнорировать? Разве их невозможно распоряжаться? – icanfathom 14 March 2018 в 17:29
  • 2
    Я имею в виду, что кэши намеренно хранятся в памяти, потому что они, как предполагается, дают вам преимущества в производительности. И, конечно же, полезная реализация кэша должна через некоторое время вернуть память. Но если кеш каким-то образом глючит или никогда не возвращает никакой памяти, я думаю, что это утечка памяти. Я писал, что кэши обычно можно игнорировать, потому что в моем случае кеш-элемент jQuery хранит некоторую память. Сначала я подумал, что это утечка, но я понял, что память была выпущена через некоторое время. – MrJingles87 15 March 2018 в 22:39

В инструментах разработчика Chrome есть вкладка Timeline-Memory:

Мы можем наблюдать за занимаемой им памятью.

Также есть профили - Память, где мы можем сделать снимок и посмотреть, что внутри. Снимки можно сравнить друг с другом:

enter image description here [!d2]

В большинстве случаев это ничего не говорит. Но, по крайней мере, вы можете видеть, какие объекты накапливаются и, возможно, структура утечки.

Другой способ использования 'Task Manager' здесь - статья, касающаяся этого:

http: //www.javascriptkit.com/javatutors/closuresleak/

26
ответ дан Sanjeev Rai 15 August 2018 в 14:14
поделиться

Вот очень хорошая статья о том, как найти утечки памяти с помощью Google Developper Tools: http://gent.ilcore.com/2011/08/finding-memory-leaks.html

Здесь это еще одна хорошая веб-страница об этом: http://gent.ilcore.com/2011/08/finding-memory-leaks.html

3
ответ дан sdespont 15 August 2018 в 14:14
поделиться

Если вы разрабатываете клиентские возможности для повторного использования сценариев, рано или поздно вы обнаружите, что обнаруживаете утечки памяти. Скорее всего, ваш браузер будет сосать память, как губка, и вы вряд ли сможете найти причину, по которой ваша прекрасная отзывчивость DHTML-навигации резко снизится после посещения нескольких страниц вашего сайта.

Разработчик Microsoft Justing

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

Почему утечка памяти?

Проблема утечки памяти не ограничивается только Интернетом Проводник. Почти любой браузер (включая, помимо прочего, Mozilla, Netscape и Opera) будет утечка памяти, если вы обеспечите адекватные условия (и это не так сложно сделать, как мы вскоре увидим). Но (по моему скромному мнению, ymmv и т. Д.) Internet Explorer - король ярок.

Не поймите меня неправильно. Я не принадлежу к толпе, кричащей «Hey IE имеет утечки памяти, проверяйте этот новый инструмент [link-to-tool] и смотрите сами». Давайте рассмотрим, как дерьмовый Internet Explorer и покрывает все недостатки в других браузерах ».

Каждый браузер имеет свои сильные и слабые стороны. Например, Mozilla потребляет слишком много памяти при начальной загрузке, это не очень хорош в операциях с строками и массивами: Opera может произойти сбой, если вы напишете смехотворно сложный сценарий DHTML, который смущает его механизм рендеринга.

Хотя мы будем фокусироваться на ситуациях утечки памяти в Internet Explorer, это обсуждение в равной степени применимы к другим браузерам.

Вот полное описание описания проблемы утечки памяти ...

Поворот отсюда

3
ответ дан Sunny S.M 15 August 2018 в 14:14
поделиться
Другие вопросы по тегам:

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