R:了解 object.size() 与内存使用的关系

Posted

技术标签:

【中文标题】R:了解 object.size() 与内存使用的关系【英文标题】:R: Understanding how object.size() relates to memory use 【发布时间】:2017-10-25 12:16:26 【问题描述】:

我已经运行了许多分析并将所有 24x8 ggplots 保存到一个列表中。

当我检查我得到的对象大小时:

print(object.size(output_list), units = "Mb")
115.3 Mb

如果我将对象保存为 rds 文件,则该对象占用大约 650 Mb。

如果我检查我得到的对象的内存使用情况:

library(pryr)
mem_used() # Note: In example I only have this object in the R memory
28.2 GB

我不确定为什么我的尺寸会有这么大的差异,而且我还没有在网上找到明确的解释。你能帮我理解为什么这个看似很小的物体会占用这么多内存吗?

我有一个想法,这是因为所有地块都将所有数据点都存储在它们的 plotData 中?但这不会影响object.size吗?我还认为这是由于树结构,例如在 data.tree 包中,每个笔记保存一个单独的环境。

【问题讨论】:

函数mem_used()返回R使用的内存总量,output_list是R会话中唯一的对象吗? 【参考方案1】:

根据帮助,mem_used 将 Ncells 和 Vcells 相加——Vcells(向量使用的内存)和 Ncells(其他所有东西使用的内存))。

这似乎在我的笔记本电脑上运行良好。

最好也这样做gc() 以获得更好的想法。

rm(list = ls())
m <- 1:100000000

object_size(m)
#400 MB

mem_used()
#454 MB

gc()
#           used  (Mb) gc trigger  (Mb)  max used  (Mb)
#Ncells   753450  40.3    1442291  77.1   1442291  77.1
#Vcells 51417867 392.3  121970165 930.6 101419240 773.8

【讨论】:

以上是关于R:了解 object.size() 与内存使用的关系的主要内容,如果未能解决你的问题,请参考以下文章

R中矩阵和栅格的相对计算负担

R语言可以处理大的数据吗

R如何在将csv文件写入磁盘之前估计它的大小

汇编语言实验二

为啥光栅文件大小与对象大小有很大不同?

R中的文本挖掘|内存管理