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的内存使用量.
在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,然后尝试为新变量分配更多内存.
| 归档时间: |
|
| 查看次数: |
14594 次 |
| 最近记录: |