为什么 r gc() 函数报告的内存使用率高于 windows 任务管理器

Why does r gc() function report higher memory usage than windows task manager

我目前正在为 r 中的一种大型(3000 万行,14 列以上)数据集而苦苦挣扎,在我的笔记本电脑上使用 data.table 包,配备 8GB 内存 运行ning 64 位 Win 10。

我一整天都在遇到内存限制,收到 R 无法为向量分配略高于 200MB 的错误。当我查看 Windows 任务管理器时,我可以看到 R 当前正在使用 2-3GB 的 RAM(或约占总数的 65%,包括系统和其他一些进程)。当我 运行 R gc() 命令时,我得到输出,8012Mb 中大约有 7800Mb 当前正在使用。

当我 运行 第二次执行 gc() 命令时,由于之前执行了 gc.[=17,我可以看到已用内存没有变化=]

处理数据时(即执行一些 data.table 命令),该进程几乎使用所有已安装的内存并将一两件事写入磁盘。

gc() 输出与我在任务管理器中看到的不同的原因是什么?或者更准确地说,为什么任务管理器中的数字较低?

假设 windows' 本机任务管理器仅显示物理 RAM 统计信息,很可能(根据我的经验确实如此)R 使用的其余内存(您的 "missing" 5-6 Gb) 由 windows 分配给交换文件(那时真的很慢)。您可以通过 e 自己检查。 G。使用我使用的 process explorer 并显示虚拟内存(包括磁盘上的虚拟内存)。

内存分配是在RAM结束之前完成的,当然是为了防止系统崩溃。根据我的经验,windows 根本不会交换 R 内存,并且在某个时候它的限制刚刚达到并且你得到一些 Error: cannot allocate vector of size 200 Mb - 另见 this question.

我猜你想通过 gc() 释放内存,尽管 运行 的使用是 controversially discussed

如果您没有其他机器有更多的 RAM,并且不想升级笔记本电脑的 RAM,您可以查看主题 cloud computing

希望对您有所帮助。