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

Как я могу получить 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
> 
4b9b3361

Ответ 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()

Надеюсь, тебе немного помочь. Вы можете увеличить лимит памяти, по крайней мере, для этого конкретного сеанса.