即使在所有对象都被移除和清除之后,如何让R释放并停止保留内存?

即使在所有对象都被移除和清除之后,如何让R释放并停止保留内存?,r,memory,memory-management,garbage-collection,R,Memory,Memory Management,Garbage Collection,我试图让一些代码在内存小于4GB的计算机上运行。我使用32位版本的R来强制执行内存上限。当我试图运行一个占用内存的命令时,我在脚本末尾碰到了一堵墙,一切都中断了。但是占用内存的任务本身需要的内存少于4GB。我已经将问题缩小到这样一个事实:尽管在当前会话中清除了内存中的所有对象,但R控制台仍然拥有1.9GB的RAM。下面的屏幕截图正好突出了我遇到的问题:请注意,内存中没有对象,但task manager说R的这个实例有1.8578GB的RAM 如果我从内存中清除所有对象,然后运行gc(),仍然无法

我试图让一些代码在内存小于4GB的计算机上运行。我使用32位版本的R来强制执行内存上限。当我试图运行一个占用内存的命令时,我在脚本末尾碰到了一堵墙,一切都中断了。但是占用内存的任务本身需要的内存少于4GB。我已经将问题缩小到这样一个事实:尽管在当前会话中清除了内存中的所有对象,但R控制台仍然拥有1.9GB的RAM。下面的屏幕截图正好突出了我遇到的问题:请注意,内存中没有对象,但task manager说R的这个实例有1.8578GB的RAM

如果我从内存中清除所有对象,然后运行
gc()
,仍然无法清除所有保留的内存(如我的屏幕截图所示)

有没有可能以某种方式清除这个记忆

如果它有任何用处,您可以通过运行

谢谢大家!

编辑:在脚本的末尾,我得到

[1] "current designing ./2011/bst.rda"
Error: cannot allocate vector of size 434.7 Mb
In addition: There were 50 or more warnings (use warnings() to see the first 50)
> gc(verbose=T)
Garbage collection 27232 = 15350+4362+7520 (level 2) ... 
31.5 Mbytes of cons cells used (49%)
450.6 Mbytes of vectors used (21%)
           used  (Mb) gc trigger   (Mb)  max used   (Mb)
Ncells  1175911  31.5    2421436   64.7   1770749   47.3
Vcells 59048650 450.6  278146328 2122.1 461815808 3523.4
> rm(list=ls(all=TRUE))
> gc(verbose=T)
Garbage collection 27233 = 15350+4362+7521 (level 2) ... 
11.1 Mbytes of cons cells used (21%)
7.1 Mbytes of vectors used (0%)
         used (Mb) gc trigger   (Mb)  max used   (Mb)
Ncells 414283 11.1    1937148   51.8   1770749   47.3
Vcells 920035  7.1  222517062 1697.7 461815808 3523.4
> 

退出R后内存是否已释放

可能您在磁盘中读取了一些数据(存储在临时文件中),而不是加载到R。因此
gc()
不会捕获这些数据

或者从一开始就执行
mem\u change(您的命令)
,看看是什么导致内存发生变化。

尝试使用命令

memory.limit()
# [1] 1934
memory.size()
# you can increase memory limit for that particular session in Windows machine
memory.limit(10000)  ## Size in Mbs
memory.limit
# [1] 10000   
由于您的是32位,因此最大限制为4095MB。要了解有关memory.size()和memory.limit()的更多信息,请在R控制台上使用以下命令并阅读相关内容

?memory.limit()
?memory.size()

希望你能从中得到一些帮助。您至少可以增加该特定会话的内存限制。

这不仅适用于R,也适用于Windows。通常情况下,如果删除了R中的变量/对象,则该过程会将内存释放到操作系统,但这是由于Windows的工作。内存并没有被完全释放,它被保留,以防进程再次请求内存,所以您将看到R仍然保存着所有的内存


所以请不要担心,这是为了重用而保留的:)

这个线程可能会有所帮助:
gc(verbose=t)
显示了什么?这可能是R和Windows任务管理器如何交互的问题。您(英勇地)假设有一个神奇的开关,它使所有东西都能使用4gb和32位。很遗憾,没有。这就是为什么几乎所有对此有选择权的人都转向64位操作系统和更多内存的原因。对于像R这样的动态语言,您只能做这么多。您似乎有内存碎片问题。尝试预先分配所需的尽可能大的向量,并在必要时重用/覆盖它,而不是按顺序分配/释放。我知道这不是你期望或希望的极客答案。但作为一个务实的解决方案,它可以让你继续前进,而不是浪费更多的时间。当我遇到这些问题时,我会保存工作区“.RData”[可能之前会清理一下]-关闭所有东西-然后重新启动R-加载我的“.RData”并继续我的工作流程。即使到了这个过程将成为工作流(通过脚本)本身的一部分的地步。。。