【发布时间】:2011-06-30 14:39:55
【问题描述】:
import json
import time
from itertools import count
def keygen(size):
for i in count(1):
s = str(i)
yield '0' * (size - len(s)) + str(s)
def jsontest(num):
keys = keygen(20)
kvjson = json.dumps(dict((keys.next(), '0' * 200) for i in range(num)))
kvpairs = json.loads(kvjson)
del kvpairs # Not required. Just to check if it makes any difference
print 'load completed'
jsontest(500000)
while 1:
time.sleep(1)
Linux top 表示 python 进程在完成 'jsontest' 函数后拥有 ~450Mb 的 RAM。如果省略了对“json.loads”的调用,则不会出现此问题。此函数执行后的 gc.collect确实会释放内存。
看起来内存没有保存在任何缓存或 python 的内部内存分配器中,因为对 gc.collect 的显式调用正在释放内存。
这是因为从未达到垃圾回收的阈值(700、10、10)吗?
我确实在 jsontest 之后放了一些代码来模拟阈值。但这没有帮助。
【问题讨论】:
标签: python json garbage-collection