任务结束后内存并未释放

如图,在我的项目中有四个通过Threads.@spawn生成的任务,任务执行时占用内存大约是1800Mb-2400MB之间。
但是当我通过某些命令让四个任务终止结束后,内存并未释放,维持在1800MB-1900MB附近。实际语法类似下面:

function test()
  ...
  task1 = Threads.@spawn function1
  task2 = Threads.@spawn function2
  task3 = Threads.@spawn function3
  task4 = Threads.@spawn function4
  return [task1l; task2; task3; task4]
end
t = test()

请问这是什么原因造成的呢,有没有类似删除任务能够把done状态的任务删除。

t有删掉吗,没有的话可以尝试t=nothing

尝试后内存开销并没有变化

再调用一次GC.gc()试试?刚在本地测试了下

1 个赞

可以了,调用后瞬间回到1500MB附近左右,实际我初始化那些函数也有1400+MB了,现在应该是正常的内存,谢谢了

请问是什么原因导致的呢

Julia 的内存回收并不是立刻进行的,GC.gc() 是一个主动触发内存回收的命令。

绝大多数时候不需要主动触发内存回收。

调用GC.gc()会增加时间成本,请问有其他更好的解决方法吗?

如果你担心的是 Julia 的内存占用过高,可以使用 Julia 1.9 新增的功能 julia --heap-size-hint=2G 来限制内存使用,更积极地触发 GC

1 个赞

新手一枚,谢谢耐心解答