即使在删除并清除所有对象后,如何让R释放并停止保持内存?

时间:2015-08-20 04:22:11

标签: r memory memory-management garbage-collection

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

如果我清除内存中的所有对象,然后运行仍然无法清除所有内存的- (void)viewWillDisappear:(BOOL)animated { [super viewWillDisappear:animated]; [self.view endEditing:YES]; } (正如您在屏幕截图中看到的那样)。

是否可以以某种方式清除此记忆?

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

重现此问题直至崩溃。 谢谢你!

enter image description here

编辑:在脚本的最后我得到

gc()

3 个答案:

答案 0 :(得分:1)

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

所以请不要担心,这是为了重复使用:)

答案 1 :(得分:0)

退出R后是否释放了内存?

也许您在磁盘中读取了一些数据(存储在临时文件中)而不是加载到R.所以gc()不会捕获它。

或者从一开始就mem_change(your command here)看看会导致内存变化的原因。

答案 2 :(得分:0)

尝试使用命令

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位,你的最大限制是4095 MB。要在memory.size()和memory.limit()上查看更多信息,请在R控制台上使用以下命令并阅读相关内容。

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

希望你得到的帮助不大。您可以至少为该特定会话增加内存限制。