清除 R 会话分配的内存(gc()没有帮助!)[重复]

Posted

技术标签:

【中文标题】清除 R 会话分配的内存(gc()没有帮助!)[重复]【英文标题】:clear memory allocated by R session (gc() doesnt help !) [duplicate] 【发布时间】:2014-12-27 12:19:40 【问题描述】:

我正在大规模进行机器学习,但由于 R 内存占用,我的计算变得如此缓慢。 我清除了我的对象,还尝试了gc(),结果:

           used  (Mb) gc trigger   (Mb)  max used   (Mb)
Ncells  4460452 231.5   15288838 1116.6  36599071 1954.7
Vcells 29572776 349.4  324509788 2712.9 350796378 3376.4

我的任务管理器显示 R 会话仍然分配了超过 3GB 的内存并且我的计算机仍然很慢。 如何释放 R 占用的内存? (我不想重启电脑)

【问题讨论】:

内存分配不是由操作系统自己管理的吗? @Pascal,没有 R 占用所需的内存,应该在使用后释放它。但由于某些原因我不知道! 您是否退出或重新启动了 R 会话? @Roland,我想如果我重新启动会话就会解决。但实际上我不想这样做,因为我经常遇到这个问题并且不想每次都重新启动会话。 您是否在使用某些包进行并行计算? 【参考方案1】:

我找到的最佳解决方案是重新启动 R 会话。 在 R 工作室ctr+shft+f10

如果你不想保存工作区

makeActiveBinding("refresh", function()  system(paste0(R.home(),"/bin/i386/R")); q("no") , .GlobalEnv)

paste0(R.home(),"/bin/i386/R --no-save") #--save will save workspace

干杯。

【讨论】:

这似乎也是我唯一的选择。挺烦人的! 这不是问题的答案。也没有任何其他建议重新启动会话的答案。当然,如果您重新启动会话,所有内容都将被删除。但你不应该这样做。一旦一个对象被删除并使用 gc() 完成垃圾收集,内存应该被释放。出于某种原因,R 不能正确地做到这一点。这是一个重要的问题,应该由 R Core 团队解决。多年来一直困扰着我......【参考方案2】:

您需要执行两个步骤。 首先,运行rm(list = ls()) 但是,虽然它删除了 ls() 中的所有对象,但您需要重新启动 R 使用.rs.restartR()

这将有效地彻底清除内存。

【讨论】:

Error in .rs.restartR() : could not find function ".rs.restartR" .rs.restartR() 是一种 RStudio 方法,它不适用于常规 R【参考方案3】:

正如这个答案 - https://***.com/a/8813862/2602477 - “gc 不会删除您仍在使用的任何变量 - 它只会为您不再有权访问的变量释放内存”。

您可以使用 rm 功能移除(几乎)工作环境中的所有内容:

rm(list = ls())

请注意,如果您还想删除隐藏的对象,则需要使用

rm(list = ls(all.names = TRUE))

【讨论】:

已经试过了。变化不大

以上是关于清除 R 会话分配的内存(gc()没有帮助!)[重复]的主要内容,如果未能解决你的问题,请参考以下文章

在python中使用gc.collect()清除内存对缓存数据的queue队列是否有影响

GC原理---垃圾收集算法

如何避免在清除 gc 期间快速增加内存?

Java GC 机制与内存分配策略

jvm垃圾收集算法

Java清除:收尾和垃圾收集