Python3.4内存使用情况

时间:2014-09-22 14:55:50

标签: python windows-7 garbage-collection python-3.4

考虑这两个代码,我在python控制台中运行:

l=[]
for i in range(0,1000): l.append("."*1000000)
# if you check your taskmanager now, python is using nearly 900MB
del l
# now python3 immediately free-d the memory

现在考虑一下:

l=[]
for i in range(0,1000): l.append("."*1000000)
l.append(l)
# if you check your taskmanager now, python is using nearly 900MB
del l
# now python3 won't free the memory

由于我正在使用这些对象,并且我需要从内存中释放它们,我需要知道为了让python识别它需要删除相应的内存。

PS:我使用的是Windows7。

1 个答案:

答案 0 :(得分:1)

因为您已经创建了循环引用,所以在垃圾收集器运行,检测循环并清理它之前,内存不会被释放。 You can trigger that manually

import gc
gc.collect()  # Memory usage will drop once you run this.

收藏家会偶尔自动投放,但仅限于certain conditions related to the number of object allocations/deallocations are met

  

gc.set_threshold(threshold0 [,threshold1 [,threshold2]])

     

设置垃圾收集阈值(收集频率)。   将threshold0设置为零会禁用收集。

     

GC根据数量将对象分为三代   收集清扫他们幸存了下来。新对象放在   最年轻的一代(第0代)。如果对象在集合中存活   它被移动到下一代老一代。因为第2代是   最古老的一代,那一代的物体留在那里   采集。 为了决定何时运行,收集器会跟踪   自上次以来的数量对象分配和解除分配   采集。当分配数量减去数量时   deallocations超过threshold0,收集开始。

因此,如果您继续在解释器中创建更多对象,最终垃圾收集器将自行启动。您可以通过降低threshold0来更频繁地实现这一目标,或者当您知道已删除其中一个包含参考周期的对象时,您可以手动调用gc.collect