Объявления
Windows 7 «жрет» память. Так ли это плохо?

В интернете мне доводилось слышать множество гневных комментариев в стиле «Да Windows 7 — полный отстой! Вы посмотрите, как она жрет память!» В доказательство приводятся скриншоты вроде того, что ниже, и опять же — все списывается на «криворуких индусских программистов». Давайте посмотрим, насколько эти наезды на программистов Microsoft обоснованы.

Допустим, вы приобрели компьютер с 8 гигабайтами памяти. Но неужели то, что используется от силы 1 гигабайт, а вся остальная память простаивает — так уж хорошо? С выходом Windows Vista и Windows 7 подход к использованию оперативной памяти кардинально поменялся: теперь ОС пытается использовать всю имеющуюся память максимально эффективно. В частности, в Windows Vista и Windows 7 появилась фича с названием SuperFetch.

 

Что же такое SuperFetch?

SuperFetch — это системный сервис, запускающийся внутри системного процесса svchost. Код его находится внутри DLL-ки %SystemRoot%\System32\Sysmain.dll. Этот сервис постоянно следит за тем, какие приложения запускает пользователь, и к каким исполняемым файлам и файлам данных они обращаются. Вся эта информация сохраняется в файлах с расширением *.db в каталоге %SystemRoot%\Prefetch. Для чего это все делается? А вот для чего: сервис SuperFetch, имея информацию о том, с какими приложениями пользователь работает наиболее часто — заранее подгружает в память соответствующий код и данные, и, когда пользователь запускает свое приложение — вся необходимая информация уже имеется в памяти, и запуск происходит намного быстрее — потому как нет необходимости считывать информацию с жесткого диска. Особенно это заметно на таких «тяжелых» приложениях, как семейство MS Office, функционал которых может быть «размазан» по десяткам и сотням exe-шников и dll-ок. SuperFetch настолько «умна», что может даже определять предпочтения пользователя в разные дни и время суток — например, то, что в рабочие дни он работает с Word и Excel, а по выходным — играется в Call of Duty, и, соответственно — подгружает в память нужные данные. Соответственно, эта область памяти помечается как «занятая», что и отображается в Task Manager’e, создавая впечатление «утечек памяти». Тем не менее, если вдруг запускается какое-то приложение, требующее выделения памяти — memory manager спокойно освобождает нужное пространство, а по завершении работы приложения память освобождается и данные подгружаются снова.
Если же какое-нибудь приложение, к примеру, завершает свою работу и освобождает память — то SuperFetch обращается к менеджеру памяти с просьбой подгрузить только что выгруженный код и даннные. Процесс этот происходит с маленькой скоростью и с низшим (Very Low) приоритетом, поэтому работа SuperFetch не приводит к падению производительности. Если вы, к примеру, отойдете покурить, а в это время запустится фоновый процесс, которому необходима память (например — антивирусная проверка), то код и данные приложения, с которым вы работали — возможно будут выгружены из памяти. Благодаря же SuperFetch — к тому моменту, когда вы вернетесь с перекура — данные вашего активного приложения будут полностью или частично подгружены обратно в память.

Более того, SuperFetch может обрабатывать режимы гибернации, «спящий режим» и смены пользователя (fast user switching). К примеру, если система уходит в гибернацию — то SuperFetch сохраняет в файл hiberfil.sys код и данные тех приложений, которые, по его мнению, скорее всего будут использоваться после выхода из гибернации. Как это «мнение» формируется? Очень просто — Большой БратSuperFetch смотрит за тобой, и за тем, что ты запускал после выхода из предыдущих гибернаций, и основываясь на этом — может предположить, что в следующий раз при выходе из гибернации ты наверняка запустишь «аську» и откроешь свой любимый браузер, чтобы почитать «хабрахабр». Ну а через часок-другой — откроешь Visual Studio, потому что проект горит, а сроки сдачи — «вчера».

Можно понаблюдать за работой SuperFetch с помощью того же Task Manager’a:

Windows 7 «жрет» память. Так ли это плохо?

Windows 7 «жрет» память. Так ли это плохо?

Если какое-то время поюзать Windows Vista/7, то можно заметить, что объем свободной памяти уменьшается. Это происходит из-за того, что SuperFetch стандартный систмный кэш Windows пытаются утилизировать доступную память для кэширования данных с диска. К примеру, если сразу после загрузки Windows запустить Task Manager — видно, что Free Memory — уменьшается, а Cached Memory — наоборот увеличивается. Если же запустить какую-нибудь «жадную до памяти» программу, или же просто запустить копирование большого файла — Free Memory увеличится и график «Physical Memory Usage» резко упадет, потому что система будет освобождать память для запущенного приложения, но потом начнет потихоньку расти — потому что собственно приложение начнет эту память забирать. Однако, со временем SuperFetch будет подгружать в память недавно выгруженные данные, поэтому значение Cached Memory будет расти, а Free Memory — уменьшаться.

Источник: http://staforce.wordpress.com/

Поделитесь полезным материалом с друзьями:


Вам помог этот совет? Вы можете помочь проекту, пожертвовав на его развитие любую сумму по своему усмотрению. Например, 20 рублей. Или больше :)

Передать $пасибо! нашему сайту через систему Webmoney
Комментарий: Артур8 июня 2013 23:16
А как быть с SSD ? То есть с советами отключать использование данной функции, если у вас твердотельный жесткий диск.
Добавление комментария:
Ваше Имя:
Ваш E-Mail:

Полужирный Наклонный текст Подчёркнутый текст Зачёркнутый текст | Выравнивание по левому краю По центру Выравнивание по правому краю | Вставка смайликов Вставка ссылкиВставка защищённой ссылки Выбор цвета | Скрытый текст Вставка цитаты Преобразовать выбранный текст из транслитерации в кириллицу Вставка спойлера
Код:
Включите эту картинку для отображения кода безопасности
обновлять капчу