你如何检查内存使用情况?通常,虚拟机会分配一些内存块用于存储其数据。一些分配的可能未使用并标记为空闲。GC 所做的是发现未从其他任何地方引用的数据并将相应的内存块标记为未使用,这并不意味着该内存已释放给操作系统。仍然从 VM 的角度来看,现在有更多的可用内存可用于进一步计算。
正如其他人所问的那样,您是否遇到过内存不足的错误?如果没有,那就没什么好担心的了。
编辑:
这和这应该足以理解内存分配和垃圾收集在 R 中是如何工作的。
从第一个文件:
有时会尝试将未使用的页面释放回操作系统。当页面被释放时,等于 R_MaxKeepFrac 乘以为每个类分配的节点数的空闲节点数被保留。发布不需要满足此要求的页面。每个 R_PageReleaseFreq 级别 1 或级别 2 集合都会尝试释放页面。
编辑2:
要查看已用内存,请尝试运行 gc(),并将详细设置为 TRUE:
gc(verbose=T)
这是内存中包含 10'000'000 个整数的数组的结果:
Garbage collection 9 = 1+0+8 (level 2) ...
10.7 Mbytes of cons cells used (49%)
40.6 Mbytes of vectors used (72%)
used (Mb) gc trigger (Mb) max used (Mb)
Ncells 198838 10.7 407500 21.8 350000 18.7
Vcells 5311050 40.6 7421749 56.7 5311504 40.6
这是在放弃对它的引用之后:
Garbage collection 10 = 1+0+9 (level 2) ...
10.7 Mbytes of cons cells used (49%)
2.4 Mbytes of vectors used (5%)
used (Mb) gc trigger (Mb) max used (Mb)
Ncells 198821 10.7 407500 21.8 350000 18.7
Vcells 310987 2.4 5937399 45.3 5311504 40.6
如您所见,Vcells 使用的内存从 40.6Mb 下降到 2.4Mb。