相关疑难解决方法(0)

在Julia中被内存分配和垃圾收集困惑

我对Julia的内存分配感到有些困惑.我从FAQ中知道清除大变量使用的内存是通过将其设置为小(如0)然后运行来完成的gc().

但是,我对以下内容感到有些困惑.我创建一个随机Float32数组:

@time A = rand(Float32, 10000, 10000);
Run Code Online (Sandbox Code Playgroud)

time表示分配了大约400MB的RAM,而Julia的RAM使用量增加了400MB.这是有道理的.

然后我应用fft,但不要将结果绑定到任何变量:

@time fft(A);
Run Code Online (Sandbox Code Playgroud)

time 表示分配了~800MB的RAM,Julia的RAM使用量增加了800MB.

但是,RAM使用率仍然比开始时高1.2GB.这让我感到困惑,因为我没有将任何变量等同于fft(A),所以我希望分配的800MB会在fft执行后立即释放.

我试着跑gc,以为朱莉娅会意识到还有800MB的RAM被用于什么:

gc();
Run Code Online (Sandbox Code Playgroud)

这什么都不做.RAM使用率保持在~1.3GB.

但是,以下两行,

A = 0;
gc();
Run Code Online (Sandbox Code Playgroud)

释放所有正在使用的1.2GB,尽管事实上sizeof(A)只有400MB.所以我的问题是:

  • 为什么它看起来好像一个400MB大小的对象(根据sizeof)实际上分配了1.2GB?

garbage-collection memory-management julia

13
推荐指数
1
解决办法
2012
查看次数