我在我的R代码中发现了奇怪的行为。为简单起见,它减少到只有几行。它具有以下结构:我加载库,建立到PostgreSQL的连接,然后读取整个表中从PostgreSQL的一个变量。之后,我用rm()
删除变量,然后使用gc()
。如果我检查存储器利用率(mem_usage()
或lineprof()
)的对象少取<1GB在存储器中。如果我运行在Ubuntu 16.4 VM代码,我还可以看到htop
,atop
分配给我的RSession的RAM。这是大约8 GB。使用gc()
会释放大约1 GB的RAM,但不能完全改善这种情况。只有在我非常满意Rsession的情况下,如此大的RAM分配才消失了。我可以从Rstudio和Terminal运行代码。图片是一样的。这是一个代码段:
con <- establishDBConnection(databasename, hostname, portnumber, username, passwortdb)
var <- dbGetQuery(con, paste0("SELECT * FROM ", myschema, ".", table, ";"))
rm(var)
gc()
我知道一次读取表格不是一个好习惯。
我想了解1)为什么1 GB的对象分配8 GB的额外内存,以及2)如何在不使会话安静的情况下释放RAM。