根据top,我的Julia程序可以处理14.5 GB的内存(顶部输出中的“VIRT”列),它在物理内存中的大小是7.5 GB(“RES”列).但是当我在程序中插入对whos()的调用时,只占了大约100 MB的内存:
ArrayViews 190 KB Module
Base 32427 KB Module
Blosc 38 KB Module
Calculus 178 KB Module
Celeste 4034 KB Module
Compat 126 KB Module
Core 3268 KB Module
DOC 1241 bytes ASCIIString
DataArrays 936 KB Module
DataFrames 1817 KB Module
Distributions 1245 KB Module
DocOpt 221 KB Module
Docile 420 KB Module
DualNumbers 59 KB Module
FITSIO 971 KB Module
FileIO 592 KB Module
ForwardDiff 304 KB Module
GZip 588 KB Module
HDF5 2698 KB Module
JLD 335 KB Module
Logging 103 KB Module
Main 46514 KB Module
NaNMath 121 KB Module
Optim 475 KB Module
PDMats 113 KB Module
Reexport 3748 bytes Module
SortingAlgorithms 41 KB Module
StatsBase 706 KB Module
StatsFuns 289 KB Module
WCS 78 KB Module
main 8665 bytes Function
我怎样才能弄清楚哪些数据结构耗尽了所有内存?或者为什么没有未引用的内存被释放? (我甚至有时会明确地调用gc().)
最佳答案 除了马特B.和张实唯提到的那些人的局限性外,朱莉娅的传统很容易被低估.对于标题和向量盒装对象(在64位系统上),每个向量总共占用大约80个字节的空间,但是这个空间不被whos计算,并且肯定会加起来.
例如,
julia> module Test
v = [[] for _ in 1:10000]
end
Test
julia> whos(Test)
Test 80 KB Module
这个80 KB大幅低估了Test真正使用的内存量 – 大约相当于一个数量级.因此,请检查代码中是否创建了大量小向量.