我确信这是一个关于python和垃圾收集的天真问题。为什么在这个python代码中内存使用量增加了?
我有一个函数在内存中创建一个大型的数据结构,然后返回一个整数。
我预计在调用该函数后,数据结构使用的内存将被释放。
但是,如果我明白下面的资源调用正在做什么(感谢这SO post),似乎并不是这样。每次调用函数时,python使用的内存总量都会增加。 (我使用Python 2.7.1。)
import resource
import random
def r(n):
a = [random.randint(1,100) for i in range(1,n)]
return n # or sum(a)
resource.getrusage(resource.RUSAGE_SELF).ru_maxrss
z=r(100000)
resource.getrusage(resource.RUSAGE_SELF).ru_maxrss
z=r(100000)
resource.getrusage(resource.RUSAGE_SELF).ru_maxrss
对此我获得,例如:
81584128
84389888
85995520
为什么内存使用量不断增加?
谢谢!
内存释放!=内存释放。解释器可以重新使用分配给对象的内存来保留其他对象,而不必先释放它。 – Bakuriu 2013-05-06 10:26:32
@Bakuriu:但在这种特殊情况下,它并不是以最佳方式重用内存。 (当我运行这个时,内存使用在第一次调用'r'之后稳定下来。) – 2013-05-06 11:52:53
谢谢 - 但请参阅下面的注释 – 2013-05-07 05:37:49