我正在处理一些相对较大的数据,并遇到了一些内存问题。这是在Linux上发生的。尽管系统内存远远超过我的数据量,但问题仍然出现在如何管理瞬态分配。
当我运行gc()时,会得到以下列表
used (Mb) gc trigger (Mb) max used (Mb)
Ncells 2147186 114.7 3215540 171.8 2945794 157.4
Vcells 251427223 1918.3 592488509 4520.4 592482377 4520.3
尽管如此,R似乎在常驻内存中分配了4GB,而在交换空间中分配了2GB。我认为这是操作系统分配的内存,R的内存管理系统将根据需要进行分配和GC。但是,假设我不想让R占用超过4GB,以防止交换空间抖动。我可以使用ulimit限制,但那样它只会崩溃,而不是在缩小空间并更频繁进行GC的情况下工作。有没有办法指定gc触发器的任意最大值,并确保R永远不会超过os分配的内存?还是我可以做些其他事情来管理内存使用情况?
bigmemory
会将东西保存在磁盘上,是吗? - Shaneff
的作用。 - Dirk Eddelbuettelbigmemory
“可能使用内存映射文件”。不确定它何时或如何相关。我从未深入研究过bigmemory
的内部,但看起来它使用了Boost.Interprocess。 - Shane