我发现了以下行为。假设我创建了以下多维数组:
spam = array(runif(96*48*60*360), dim = c(96,48,60,360))
可以预测R应该使用多少内存,即(96 * 48 * 60 * 360)* 4字节= 759.4 Mbyte。使用lsos
函数很好地确认了这一点(请参阅this post):
> lsos()
Type Size PrettySize Rows Columns
spam array 796262520 759.4 Mb 96 48
lsos function 776 776 bytes NA NA
然而,作为一个过程的R使用了更多的内存,大小只有两倍:
$ top | grep rsession
82:17628 hiemstra 20 0 1614m **1.5g** 8996 S 0.3 40.4 0:04.85 rsession
为什么R会这样做?我假设分配额外的保留内存以使R更快速地访问?有什么想法吗?
答案 0 :(得分:6)
因为垃圾收集器还没有运行 所以有很多垃圾,可能是在创建大数组时产生的,必须清除。
如果通过调用gc()
函数强制执行垃圾收集,您将看到使用的内存非常接近数组的大小:
> memory.size()
[1] 775.96