Использование верхней памяти для макетов

Я только что перезапустил свой веб-браузер Firefox снова, потому что он начал заикаться и замедляться. Это происходит через день из-за (мое понимание) чрезмерного использования памяти. Я заметил, что это берет 40M, когда это запускается и затем, к тому времени, когда я замечаю, замедляются, это переходит к 1G, и моя машина не имеет ничего больше для предложения, если я не закрываю другие приложения. Я пытаюсь понять технические причины позади почему его такая трудная проблема к соль ve.

Mozilla имеет страницу об использовании верхней памяти:

http://support.mozilla.com/en-US/kb/High+memory+usage

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

Некоторые вопросы, которые я уже обдумываю (они могли быть глупыми так, успокаиваются):

  • Когда я закрываю все вкладки, почему использование памяти не идет полностью вниз?
  • Почему не там никакие пределы на использование памяти расширений/тем/плагинов?
  • Почему использование памяти увеличивается, если оно оставило открытым в течение долгих промежутков времени?
  • Почему утечки памяти настолько трудно найти и зафиксировать?

Агностик приложения и языка отвечает также очень ценивший.

6
задан Billy ONeal 8 June 2011 в 01:50
поделиться

4 ответа

Браузеры похожи на людей - они стареют, раздуваются и их бросают в пользу более молодых и стройных моделей.

Firefox - это не просто браузер, это экосистема. Хотя я считаю, что последние версии сильно раздуты, основной продукт в целом стабилен.

Однако firefox - это экосистема / платформа для:

1) Плохо написанных плагинов

2) Плохо написанного кода JavaScript, который выполняется внутри него.

3) Adobe Flash в качестве платформы для тяжелого видео и для плохо написанных рекламных сценариев, таких как «ударь Усаму бен Ладена уткой, чтобы снизить ставку по ипотеке и получить бесплатный iPod * (требуется участие).

4) Quicktime и другой медиаплеер.

5) Некоторый встроенный код Java.

Описание утечки памяти предполагает, что скрипт работает ненормально или сторонний инструмент запрашивает больше памяти. Если вы когда-нибудь запускали Flash на Mac, это почти само собой разумеющееся при 90% загрузке ЦП.

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

Если вы хотите провести эксперимент, чтобы продемонстрировать это, возьмите Mac с Firefox, перейдите на хорошо написанный сайт, например Stack Overflow, и потратьте час. Использование памяти не должно сильно увеличиваться. Затем потратьте 5 минут на посещение случайных страниц на Myspace.

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

  • Когда я закрываю все вкладки, почему не расходуется память все вниз?

В то время как каждый экземпляр браузера является независимым процессом со своей собственной памятью, все вкладки в одном окне находятся внутри одного процесса. В Firefox раньше использовалось какое-то кеширование в памяти, и простое закрытие вкладки не удаляло соответствующую информацию немедленно из кеша в памяти. Если вы повторно открыли вкладку на том же сайте, вы можете повысить производительность. Существовал расширенный параметр, позволяющий отключить его, например browser.cache.memory.enable. Или просто поискать отключение кеша памяти.

* Why is there no limits on extensions/themes/plugins memory usage?

По той же причине, что в Windows или Linux нет процесса проверки приложений, которые вы можете запустить в них. Это открытая среда, и вы берете на себя риск. Если вам нужна среда, в которой приложения и расширения «проверяются», Apple может быть подходящим решением:)

* Why does the memory usage increase if it's left open for long periods of time?

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

* Why are memory leaks so difficult to find and fix?

Это о бухгалтерском учете. Подумайте о каждом предмете, который вы когда-либо одалживали (даже о ручке), или о том, что кто-то одолжил у вас за всю вашу жизнь. Все ли они учтены? Утечки памяти аналогичны (вы заимствуете память из системы), за исключением того, что вы передаете элементы.Затем посмотрите на вещи на своем столе: вы оставили что-нибудь лежать, потому что «вам это может скоро понадобиться», хотя, вероятно, вы этого не сделаете? та же история.

10
ответ дан 8 December 2019 в 18:34
поделиться
  • Почему утечки памяти так сложно найти и исправить?

Потому что некоторые разработчики отказываются использовать такие инструменты, как Electric Fence.

2
ответ дан 8 December 2019 в 18:34
поделиться

В Википедии есть божественная статья об утечках памяти: http://en.wikipedia.org/wiki/Memory_leak

0
ответ дан 8 December 2019 в 18:34
поделиться

Утечки памяти возникают в первую очередь потому, что вы хотите хранить данные в памяти, а не на диске. Например, предположим, что у вас есть веб-страница, на которой есть изображения, CSS, JavaSript, текст. Если для отображения страницы вы будете переходить на жесткий диск каждый раз, когда захотите использовать интерпретатор JavaScript или синтаксический анализатор CSS, или механизм рендеринга шрифтов для отображения текста, тогда браузер будет работать очень медленно и иногда не будет работать. вообще (потому что для одной части JavaScript могут потребоваться переменные, которые, например, оставлены другой частью JavaScript). Таким образом, браузер пытается сохранить в памяти все, что необходимо для его работы, и эти вещи легко перекрестные ссылки (вызовы JavaScript в Adobe Flash, вызовы Adobe Flash в JavaScript и т. Д.). И вы должны быть очень осторожны с такими ссылками на ресурсы, потому что их преждевременная очистка и нарушение порядка приведет к поломке кода (лучше сохранить ресурс, чем внезапно умереть, потому что его нет).

P.S. См. Также эту статью для некоторых кровавых подробностей.

1
ответ дан 8 December 2019 в 18:34
поделиться
Другие вопросы по тегам:

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