R中的内存使用情况

Chr*_*ois 25 memory-management r

在创建大对象并耗尽RAM之后,我将尝试使用在当前环境中删除对象

rm(list=ls())
Run Code Online (Sandbox Code Playgroud)

当我检查我的RAM使用情况时,没有任何改变.即使在呼叫之后gc()什么也没有改变 我只能通过退出来补充我的RAM.

任何人都有建议处理R内的内存密集型对象?

Dav*_*ith 20

删除的对象的内存不会立即释放.R使用一种称为"垃圾收集"的技术来回收已删除对象的内存.它会定期循环访问可访问对象列表(基本上,那些具有名称且尚未删除且可由用户访问的对象),并"标记"它们以进行保留.在垃圾收集扫描之后,任何未标记对象的内存都将返回到操作系统.

垃圾收集会自动进行,您无法直接控制此过程.但是您可以通过从命令行调用命令gc()来强制扫描.

即便如此,在某些操作系统上,垃圾收集可能无法回收内存(如操作系统所报告).例如,较旧版本的Windows可能会增加但不会减少R的内存占用.垃圾收集只会在将来为新对象腾出空间,但不会减少R的内存使用量.


Ric*_*ton 8

在Windows上,您描述的技术适合我.请尝试以下示例.

打开Windows任务管理器(CTRL + SHIFT + ESC).

启动RGui.RGui.exe内存使用量为27 460K.

类型

gcinfo(TRUE)
x <- rnorm(1e8)
Run Code Online (Sandbox Code Playgroud)

RGui.exe内存使用现在是811 100K.

类型rm("x").RGui.exe内存使用率仍为811 100K.

类型gc().RGui.exe内存使用现在为28 332K.

请注意,如果已从工作区中删除了对象,则会自动调用gc,然后尝试为新变量分配更多内存.