Заставляет ли приложение освобождать выделенную память?

С тех пор, как я вернулся в Firefox примерно год назад, я снова и снова сталкивался с одной и той же проблемой – браузер просто продолжает есть мою память. Проблема возникает из (возможно, неправильного предположения), что, как только пользователь закрывает вкладку, браузер будет освобождать выделенную память для этой вкладки. Конечно, Firefox, как и многие другие, имеет некоторое кэширование, работающее в фоновом режиме. Повторное открытие недавно закрытых вкладок также, похоже, имеет к этому какое-то отношение. Таким образом, этот выпуск памяти происходит не так быстро, как пользователь может пожелать, чтобы это произошло.

Я читал на многих форумах (включая Mozilla), что если другому процессу требуется выделенная память, которой Firefox не нужен, OS (в моем случае Debian Jessie) возьмет часть из браузера и передаст ее другому процессу. Да, это действительно должно произойти, но это не так. Firefox продолжает питаться резидентной памятью, и как только он почти все ушел (например, 3,6 ГБ или около того 3,8 ГБ), обмен свопами. Все это приводит к чрезвычайно болезненному просмотру. Закрытие вкладок не приносит пользы. Даже когда я закрываю Firefox, выделенная память все еще существует довольно долгое время.

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

РЕДАКТИРОВАТЬ:

В соответствии с запрошенным здесь результатом является free вызов (используется параметр -h для целей удобочитаемости) до и после отключения Firefox:

До:

  total used free shared buffers cached Mem: 3.7G 3.6G 134M 6.8M 5.0M 166M +/- buffers/cache: 3.4G 306M Swap 3.7G 2.8G 916M 

После:

  total used free shared buffers cached Mem: 3.7G 2.9G 856M 4.8M 12.0M 179M +/- buffers/cache: 2.7G 1.0G Swap 3.7G 2.7G 998M 

Как вы можете видеть, небольшое снижение заметно, но это ничто по сравнению с общей памятью, использующей (как резидент, так и своп) даже через 20-30 минут после закрытия браузера. Помимо Firefox у меня нет ничего другого, кроме обычных процессов Debian и нескольких панельных апплетов (погода, мониторинг CPU + HDD + Mem, мониторинг сети и т. Д.), Которые не занимают много памяти, и я едва могу заметить их значения с помощью htop . Все, что я сделал, в основном оставляло браузер открытым весь день и закрывал / открывал вкладки. Я должен признать, что в моей сессии много вкладок, но после начала (и позже) я загружаю только некоторые из них. Я предполагаю, что, возможно, даже когда он не загружен содержимым, вкладки занимают много памяти. Однако это не объясняет, почему после закрытия браузера у меня такое высокое распределение памяти. Это на самом деле так высоко, что иногда я не могу нормально выключить свою систему и выполнять холодное завершение работы.

One Solution collect form web for “Заставляет ли приложение освобождать выделенную память?”

Короткий ответ: нет, когда приложение выделило память и использовало ее, оно «принадлежит» этому приложению, и если это приложение не выпустит, ничто не сможет его вернуть. (Это не так просто, как вызов free() хотя это просто возвращает память в пул отдельных приложений, а не в систему.)

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

В Linux в качестве последнего средства убийца OOM будет входить и убивать процессы, чтобы восстановить их память.

Странно, что вы не видите, как память восстанавливается, как только Firefox останавливается; возможно, процесс Firefox занимает некоторое время, чтобы фактически выйти, после того, как его окно исчезло (проверьте с помощью ps или вашего диспетчера задач). Когда процесс останавливается, вся выделенная память освобождается и становится доступной для других.

  • Адвокатская кружка Firefox на Linux Mint 13
  • Недавно установленный Pipelight для монетного двора 16 - Две версии Flash-выпуска
  • Firefox и firefox-esr в OpenBSD 5.5
  • Shell с вкладки Firefox
  • Firefox заменяет неправильный запасной шрифт с нормальным весом
  • Является ли максиминным значением network.http.pipelining.maxrequests еще 8?
  • Как установить размер окна и местоположение приложения на экране с помощью командной строки?
  • Solaris JRE Mozilla
  • Где Firefox 10 ищет плагины?
  • Как заставить Java работать с хромом или firefox
  • Сообщение об ошибке Firefox при добавлении сертификата клиента, подписанного CA
  • Linux и Unix - лучшая ОС в мире.