我发现了以下行为。假设我创建以下多维数组:
spam = array(runif(96*48*60*360), dim = c(96,48,60,360))
R 为此需要使用多少内存是可以预测的,即 (96*48*60*360) * 4 字节 = 759.4 Mbyte。使用以下很好地证实了这一点lsos
函数(参见这个帖子 https://stackoverflow.com/questions/1358003/tricks-to-manage-the-available-memory-in-an-r-session):
> 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 更快地访问它?有什么想法吗?
因为垃圾收集器还没有运行。
因此,有很多垃圾,可能是在创建大数组期间生成的,必须清除。
如果您通过调用强制垃圾收集gc()
函数,您将看到使用的内存将非常接近数组的大小:
> memory.size()
[1] 775.96
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)