Память для удаленных объектов не освобождается немедленно. R использует технику, называемую «сборкой мусора», чтобы освободить память для удаленных объектов. Периодически он циклически просматривает список доступных объектов (в основном, те, которые имеют имена и не были удалены и, следовательно, могут быть доступны пользователю), и «помечает» их для хранения. Память для любых немаркированных объектов возвращается операционной системе после очистки сборки мусора.
Сборка мусора происходит автоматически, и вы не имеете никакого прямого контроля над этим процессом. Но вы можете принудительно выполнить очистку, вызвав команду gc () из командной строки.
Даже тогда в некоторых операционных системах сборка мусора может не освободить память (как сообщает ОС). Старые версии Windows, например,
В Windows метод, который вы описываете, работает для меня. Попробуйте следующий пример.
Откройте диспетчер задач Windows (CTRL + SHIFT + ESC).
Запустите RGui. Использование памяти RGui.exe составляет 27 460 КБ.
Тип
gcinfo(TRUE)
x <- rnorm(1e8)
Использование памяти RGui.exe теперь составляет 811 100 КБ.
Тип rm ("x")
. RGui. Использование exe mem по-прежнему составляет 811 100 КБ.
Введите gc ()
. Теперь используется память RGui.exe 28 332 КБ.
Обратите внимание, что gc должен вызываться автоматически, если вы удалили объекты из своей рабочей области, а затем вы попытаетесь выделить больше памяти для новых переменных.
У меня сложилось впечатление, что проверяются несколько форм gc ()
, прежде чем R сообщит о неудачном выделении памяти. В настоящее время я не знаю решения для этого, кроме перезапуска R, как вы предлагаете. Похоже, что R не дефрагментирует память.