使用gc()命令强制垃圾收集在R中运行

我定期草率地编程。好的,我一直都在草率地编写程序,但有时会以内存不足错误的形式赶上我。我开始练习一些纪律,用rm()命令删除对象,情况会变得更好。我在网上看到有关gc()在删除大数据对象后是否应显式调用的混合消息。有人说R返回内存错误之前它将运行,gc()而另一些人则说手动强制gc是一个好主意。

gc()为了确保最大的内存可用性,是否应该在删除大对象之后运行?


ibeautiful
浏览 1622回答 3
3回答

噜噜哒

“大概。” 我也这样做,甚至经常像cleanMem <- function(n=10) { for (i in 1:n) gc() }但是,以我的经验,这并不能使记忆恢复到原始状态。因此,我通常要做的是将任务保留在脚本文件中,并使用“ r”前端(在Unix上和从“ littler”软件包中)执行那些任务。Rscript是该其他OS上的替代方案。该工作流程恰好与统计分析和报告编写工作流在会话中管理可用内存的技巧我们之前在这里介绍过。

临摹微笑

晚会晚了一点,但是:显式调用gc将“现在”释放一些内存。...因此,如果其他进程需要内存,则可能是个好主意。例如在致电system或类似电话之前。或者,当您“完成”脚本后,R会闲置一会儿,直到下一个作业到达为止-再次如此,以便其他进程获得更多的内存。如果您只是想让脚本运行得更快,那没关系,因为R会在需要时稍后调用它。由于正常的GC周期可能永远都不需要调用它,因此它甚至可能更慢。...但是,例如,如果您想测量时间,通常最好在运行测试之前进行GC。这是system.time默认情况下的功能。更新正如@DWin指出的那样,R(或C#或Java等)并不总是知道何时内存不足以及GC是否需要运行。因此,有时您可能需要执行GC来解决内存系统中的缺陷。
打开App,查看更多内容
随时随地看视频慕课网APP