rm()之后,R内存未释放;环境中没有物体

时间:2018-12-19 17:59:09

标签: r memory-management readr

运行用于创建和写入文件的进程后,R不会释放所有内存:

library(readr)
library(tidyverse)

N=100000000

memsize_1_start <- memory.size()

garbage <- tibble(a=runif(N), b=runif(N))

memsize_2_before_write <- memory.size()

readr::write_delim(garbage, "test.dat",col_names = FALSE)

memsize_3_after_write <- memory.size()

rm(garbage)

memsize_4_after_rm <- memory.size()

print(paste0("At start: " ,    memsize_1_start))
print(paste0("Before write: ", memsize_2_before_write))
print(paste0("After write ",   memsize_3_after_write))
print(paste0("After rm ",      memsize_4_after_rm))

产量: [1]“开始时:84.07”

[1]“写前:1602.51”

[1]“写入后1628.55”

[1]“在rm 1628.57之后”

在rm()之后,Rstudio的环境窗格中没有列出任何对象。我的实际用例涉及在10到20年的循环中读取较大的(30GB)文件。一年读取输入文件会导致保留的内存比此处显示的还要多,并且由于处于循环中,因此每次迭代后我都无法重新启动。

如何在不重新启动的情况下恢复此内存?

1 个答案:

答案 0 :(得分:0)

您可以在循环中尝试gc(),这将在每次迭代后清除一些内存。