我用M
创建了一个大的多维数组np.zeros((1000,1000))
。经过一定数量的操作后,我不再需要了。如何在程序执行期间动态释放RAM? M=0
是否会为我做这件事?
答案 0 :(得分:14)
在 general 中你不能。即使你删除了对象的所有引用,它仍然留给python实现来重用或释放内存。在CPython上,您可以调用gc.collect()
来强制执行垃圾收集。但是虽然这可能会回收内存,但它并不一定会将其返回给操作系统。
但是:numpy是一个扩展模块,可以自己管理,并管理自己的内存。
当我监视python进程的内存使用情况时,我看到在del(M)
In [1]: import numpy as np
In [2]: M = np.zeros((1000,1000))
In [3]: del(M)
In [4]:
刚开始IPython之后:
slackbox:~> ps -u 77778
USER PID %CPU %MEM VSZ RSS TT STAT STARTED TIME COMMAND
rsmith 77778 0.0 0.5 119644 22692 0 S+ 2:37PM 0:00.39 /usr/local/bin/py
导入numpy(1)后:
slackbox:~> ps -u 77778
USER PID %CPU %MEM VSZ RSS TT STAT STARTED TIME COMMAND
rsmith 77778 1.0 0.8 168548 32420 0 S+ 2:37PM 0:00.49 /usr/local/bin/py
创建数组(2)后:
slackbox:~> ps -u 77778
USER PID %CPU %MEM VSZ RSS TT STAT STARTED TIME COMMAND
rsmith 77778 0.0 1.0 176740 40328 0 S+ 2:37PM 0:00.50 /usr/local/bin/py
致电del
(3)后:
slackbox:~> ps -u 77778
USER PID %CPU %MEM VSZ RSS TT STAT STARTED TIME COMMAND
rsmith 77778 0.0 0.8 168548 32496 0 S+ 2:37PM 0:00.50 /usr/local/bin/py
slackbox:~>
所以在这种情况下使用del()
可以减少使用的RAM量。
请注意,numpy有一个例外。 Numpy可以使用另一个扩展库分配的内存。在这种情况下,numpy对象被标记为numpy不拥有内存,释放它将留给另一个库。
答案 1 :(得分:4)
答案 2 :(得分:0)
有两种方式.......
1)。 del M
But it will delete the array object it self.
2)。 M.clear()
you can clear the array without deleting M object