8

Некоторое время назад из любопытства я написал программу на Java, которая очень быстро занимает много памяти. (Это добавляет BufferedImages к массиву в цикле.)

Я оставил системный монитор Windows открытым, чтобы наблюдать за использованием оперативной памяти.

Когда я запустил программу, использование оперативной памяти росло очень быстро, и, поскольку оно достигло примерно 100% от 6 ГБ ОЗУ, мой компьютер стал работать крайне медленно. Примерно через одну минуту мне удалось завершить программу, и мой компьютер медленно восстановил скорость. Что привлекло мое внимание, так это то, что использование памяти сначала медленно уменьшалось, а затем внезапно уменьшилось до почти 0 МБ, а затем снова возросло до уровня простоя около 2-2,5 ГБ.

Я сделал скриншот использования оперативной памяти в системном мониторе:

Мне было интересно, может ли кто-нибудь объяснить, что происходит, когда у компьютера заканчивается память и почему он не возвращается в режим ожидания сразу после завершения программы, а примерно через 60 секунд? Кроме того, почему использование сводится к нулю, а не к простому использованию?

1 ответ1

13

Когда вы начнете достигать предела основной памяти, ваша операционная система начнет выгружать память на диск, чтобы освободить место для дополнительных ресурсов (это называется подкачкой страниц). Вот почему ваш компьютер работает очень медленно, потому что дисковод работает медленнее ОЗУ, даже если вы используете SSD, и это также причина, по которой ваша программа может работать без остатка основной памяти.

Свободная память часто выгружается первой, чтобы активные программы могли иметь как можно больше памяти. По этой причине использование памяти снижается ниже обычного состояния простоя. Система снова начнет обмениваться страницами памяти, и свободная память со временем заполнится в ОЗУ.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .