gc()和rm()之间的区别是什么
我正在使用调用rm(list=ls())
来定期清理R中的内存。
之后我需要调用垃圾回收器gc()
吗?
这两个函数有什么区别? gc()
对某些variables调用rm()
吗?
首先,需要注意的是,两者非常不同,因为gc
不会删除任何您仍在使用的variables – 它只会释放您无法访问的variables的内存(不pipe是使用rm()
还是使用rm()
比如说,在一个已经返回的函数中创build)。 运行gc()
永远不会让你失去variables。
调用rm()
之后是否应该调用gc()
的问题是一个很好的问题。 gc的文档有助于说明:
gc的调用导致垃圾收集发生。 这也会在没有用户干预的情况下自动发生,调用gc的主要目的是报告内存使用情况。
但是,在移除大对象后调用gc会很有用,因为这可能会提示R将内存返回给操作系统。
所以答案是可以很好地调用gc()
(至less不能伤害),即使它可能会被触发(如果不是马上就会很快)。
我个人喜欢在循环中包含gc()
,以便在循环开始填充可用空间时释放一些RAM。 就像是
for(i in 1:1000){ res[[i]] = some operation gc() }