Как я могу получить R, чтобы освободить и остановить хранение памяти даже после того, как все объекты были удалены и очищены?
Я пытаюсь получить код, работающий на компьютерах с объемом памяти менее 4 ГБ. Я использую 32-разрядную версию R для обеспечения того, чтобы потолок с максимальной памятью. я нажимаю на стену ближе к концу script, когда я пытаюсь запустить команду hogging для памяти, и все ломается. но сама задача по хранению памяти требует меньше 4 ГБ. Я сузил проблему до того, что, несмотря на очистку всех объектов из памяти в текущем сеансе, консоль R все еще держит 1,9 ГБ ОЗУ. снимок экрана ниже показывает, где именно я нахожу проблему: обратите внимание, что в памяти нет нулевых объектов, но диспетчер задач говорит, что этот экземпляр R имеет 1.8578 ГБ ОЗУ.
если я очистил все объекты из памяти, а затем запустил gc()
, который все еще не очищает всю сохраненную память (как вы можете видеть на моем снимке экрана).
Можно ли как-то очистить эту память?
если он используется, вы можете воспроизвести это до точки сбоя, запустив этот script
Благодарю вас!
![введите описание изображения здесь]()
edit: в конце script я получаю
[1] "current designing ./2011/bst.rda"
Error: cannot allocate vector of size 434.7 Mb
In addition: There were 50 or more warnings (use warnings() to see the first 50)
> gc(verbose=T)
Garbage collection 27232 = 15350+4362+7520 (level 2) ...
31.5 Mbytes of cons cells used (49%)
450.6 Mbytes of vectors used (21%)
used (Mb) gc trigger (Mb) max used (Mb)
Ncells 1175911 31.5 2421436 64.7 1770749 47.3
Vcells 59048650 450.6 278146328 2122.1 461815808 3523.4
> rm(list=ls(all=TRUE))
> gc(verbose=T)
Garbage collection 27233 = 15350+4362+7521 (level 2) ...
11.1 Mbytes of cons cells used (21%)
7.1 Mbytes of vectors used (0%)
used (Mb) gc trigger (Mb) max used (Mb)
Ncells 414283 11.1 1937148 51.8 1770749 47.3
Vcells 920035 7.1 222517062 1697.7 461815808 3523.4
>
Ответы
Ответ 1
Это не только для R, но и для Windows в целом. Обычно, если вы удалили переменную/объект в R. Процесс освобождает память для ОС, но из-за работы с Windows. Эта память не была полностью выпущена, она сохранялась в случае повторной обработки запроса, так что вы увидите, что R все еще держит всю эту память.
Поэтому, пожалуйста, не волнуйтесь, это сохраняется для повторного использования:)
Ответ 2
Является ли память выпущена после выхода из R?
Возможно, у вас есть некоторые данные, которые читаются на диске (хранятся во временном файле), а не загружаются в R. Таким образом, gc()
не будет записывать это.
Или сделайте mem_change(your command here)
с самого начала, чтобы увидеть, что ведет к изменению в памяти.
Ответ 3
Попробуйте использовать команды
memory.limit()
# [1] 1934
memory.size()
# you can increase memory limit for that particular session in Windows machine
memory.limit(10000) ## Size in Mbs
memory.limit
# [1] 10000
Поскольку ваш 32-битный, ваш максимальный предел будет 4095 МБ. Чтобы узнать больше о memory.size() и памяти .limit(), используйте приведенные ниже команды на консоли R и прочитайте об этом.
?memory.limit()
?memory.size()
Надеюсь, тебе немного помочь. Вы можете увеличить лимит памяти, по крайней мере, для этого конкретного сеанса.