объяснение параметра сборки мусора - PullRequest
0 голосов
/ 21 мая 2018

В самой последней версии R (3.5.0) добавлен новый параметр для сборки мусора (полный).

gc(verbose = getOption("verbose"), reset = FALSE, full = TRUE)

все, что было сделано, похоже, решило мои проблемы с памятью.Моя проблема в том, что я не понимаю документацию, как она написана для «экспертов», но для простых смертных, таких как я, довольно сложно понять, что это означает.

Кто-нибудь может объяснить немного более подробно, чтоследующие описания параметров на самом деле означают, и какая разница для меня, выбирая True / False для каждого?

сбросить логически;если TRUE, значения для максимального используемого пространства сбрасываются до текущих значений.

full logic;если ИСТИНА полная коллекция выполнена;в противном случае могут быть собраны только недавно выделенные объекты.

Полная документация по адресу:

https://stat.ethz.ch/R-manual/R-devel/library/base/html/gc.html

Заранее спасибо.

1 Ответ

0 голосов
/ 21 мая 2018

Память R, выделяемая для векторов, называется Vcells (R выделяет пространство для векторов, кратное 8 байтам), а память, выделяемая для других объектов, - как Ncells (28 байтов каждый в 32-битных системах и 56 байтов в 64-битных системах).).В начале R-сеанса до того, как какой-либо объект был создан в R-сеансе, функция gc () выводит:

gc(verbose=TRUE, full=TRUE)
# Garbage collection 2 = 0+0+2 (level 2) ... 
#13.4 Mbytes of cons cells used (41%)
#3.7 Mbytes of vectors used (6%)
#         used (Mb) gc trigger (Mb) max used (Mb)
#Ncells 249316 13.4     608371 32.5   407443 21.8
#Vcells 484528  3.7    8388608 64.0  1607721 12.3

Используется столбец сообщает, сколько ячеек было выделено, и следующие столбцы сообщаютобщий размер в мегабайтах.Столбец gc сообщает, когда произойдет следующая сборка мусора.Столбец max used сообщает о максимальном объеме памяти, использованном с момента последнего вызова функции gc ().Так, например, если мы создадим новый объект, мы увидим изменение в выводе gc ():

x <- as.list(1:10000)
y <- 1:100000
gc(verbose=TRUE, full=TRUE)
#Garbage collection 3 = 0+0+3 (level 2) ... 
#13.9 Mbytes of cons cells used (43%)
#3.9 Mbytes of vectors used (6%)
#         used (Mb) gc trigger (Mb) max used (Mb)
#Ncells 259262 13.9     608371 32.5   407443 21.8
#Vcells 504438  3.9    8388608 64.0  1607721 12.3

Создайте большой вектор с плавающей точкой и затем удалите его:

z <- seq(from=0.0, to=1.0, by=0.0000001)
gc(verbose=TRUE, full=TRUE)
#Garbage collection 6 = 0+0+6 (level 2) ... 
#14.0 Mbytes of cons cells used (43%)
#80.2 Mbytes of vectors used (39%)
#           used (Mb) gc trigger  (Mb) max used  (Mb)
#Ncells   261151 14.0     608371  32.5   407443  21.8
#Vcells 10508970 80.2   26703045 203.8 20512469 156.5

rm(z)
gc(verbose=TRUE, full=TRUE)
#Garbage collection 8 = 0+0+8 (level 2) ... 
#14.0 Mbytes of cons cells used (43%)
#3.9 Mbytes of vectors used (2%)
#         used (Mb) gc trigger  (Mb) max used  (Mb)
#Ncells 261391 14.0     608371  32.5   407443  21.8
#Vcells 509467  3.9   21362436 163.0 20512469 156.5

Сборщик мусора восстанавливает память, которая больше не используется.Приведенные выше значения из таблицы в столбце «gc trigger» указывают, когда gc запускается.Если вы вызываете функцию gc (), вы можете заставить сборщик мусора вернуть память в систему.

Можно изменить максимумы, установленные для Ncells или / и Vcells.См. https://stat.ethz.ch/R-manual/R-devel/library/base/html/Memory.html Эта ссылка предоставляет подробную информацию не только об использовании памяти в R, но и о том, как работает сборщик мусора в R.

Что касается вашего основного вопроса о параметре full = TRUE,для документации R эта опция должна использоваться, если вы хотите более точный отчет об использовании памяти.Это также заставляет выполнять полную сборку мусора (и в результате может занять немного больше времени).В противном случае R может выполнить только частичную сборку мусора, освобождая память только для недавно выделенных объектов.

Кстати, как вы можете видеть из последней версии документации R (? Память), способ управления памятью в RВыполнено очень многое зависит от ОС у вас есть.Например: В Windows параметр --max-mem-size (или переменная окружения R_MAX_MEM_SIZE) устанавливает максимальное (виртуальное) выделение памяти: минимально допустимое значение составляет 32M.Это предназначено для отлова попыток выделить чрезмерное количество памяти, что может привести к нехватке ресурсов в других процессах.Смотрите также memory.limit .

Опять же, я бы очень внимательно прочитал документацию по теме памяти в R (? Memory).Обязательно прочитайте версию, соответствующую версии R, которую вы используете в своей системе, поскольку между версиями есть некоторые изменения.

Есть еще две ссылки, которые стоит прочитать, чтобы получить больше информации о том, как сборщик мусора работает в R:http://homepage.stat.uiowa.edu/~luke/R/barrier.html http://homepage.stat.uiowa.edu/~luke/R/gengcnotes.html

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

Еще одно примечание: Rstudio запускает R с собственными настройками.Например, вот вывод из обычного сеанса R:

gc(verbose=TRUE, full=TRUE)
#Garbage collection 2 = 0+0+2 (level 2) ... 
#13.4 Mbytes of cons cells used (41%)
#3.7 Mbytes of vectors used (6%)
#         used (Mb) gc trigger (Mb) max used (Mb)
#Ncells 249316 13.4     608371 32.5   407443 21.8
#Vcells 484528  3.7    8388608 64.0  1607721 12.3

memory.limit()
#[1] 7888

memory.size()
#[1] 29.02

Вот вывод из сеанса R в Rstudio:

gc(verbose=TRUE, full=TRUE)
#Garbage collection 19 = 15+1+3 (level 2) ... 
#32.6 Mbytes of cons cells used (45%)
#9.3 Mbytes of vectors used (14%)
#          used (Mb) gc trigger (Mb) max used (Mb)
#Ncells  610199 32.6    1369865 73.2  1369865 73.2
#Vcells 1210415  9.3    8388608 64.0  1842725 14.1

memory.limit()
#[1] 7888

memory.size()
#[1] 99.49
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...