Подтвердить что ты не робот

Использование памяти в R

После создания больших объектов и исчерпания ОЗУ, я попытаюсь удалить объекты в текущей среде, используя

rm(list=ls())

Когда я проверяю использование ОЗУ, ничего не изменилось. Даже после вызова gc() ничего не изменилось. Я могу только пополнить свою RAM, оставив R.

У кого-нибудь есть рекомендации по работе с объектами с интенсивной памятью внутри R?

4b9b3361

Ответ 1

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

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

Даже тогда, в некоторых операционных системах сбор мусора может не вернуть память (как сообщается ОС). Старые версии Windows, например, могут увеличиваться, но не уменьшать объем памяти коллекции R. Garbage, это создаст пространство для новых объектов в будущем, но не уменьшит использование памяти в R.

Ответ 2

В Windows техника, которую вы описываете, работает для меня. Попробуйте следующий пример.

Откройте диспетчер задач Windows (CTRL + SHIFT + ESC).

Запустите RGui. Использование RGui.exe mem составляет 27 460K.

Тип

gcinfo(TRUE)
x <- rnorm(1e8)

Использование RGui.exe mem теперь составляет 811 100K.

Введите rm("x"). Использование RGui.exe mem все равно 811 100K.

Введите gc(). Использование RGui.exe mem теперь составляет 28 332 тыс.

Обратите внимание, что gc shoud будет вызываться автоматически, если вы удалили объекты из своей рабочей области, а затем попытаетесь выделить больше памяти новым переменным.

Ответ 3

Мое впечатление, что несколько форм gc() проверяются до того, как R сообщает о сбое в распределении памяти. В настоящее время я не знаю об этом решении, кроме перезапуска R, как вы предлагаете. Похоже, что R не дефрагментирует память.

Ответ 4

Старый вопрос, я понимаю, но я обнаружил, что (в ОС Mojave), вызывая pryr :: mem_used() в сеансе R, заставляет монитор активности немедленно обновлять сообщаемое использование памяти, чтобы отразить только объекты, сохраненные в R среда.