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 содержит ~ 450 МБ ОЗУ после завершения функции 'jsontest'. Если вызов « json.loads » опущен, то эта проблема не наблюдается. gc.collect после выполнения этой функции действительно освобождает память .
Похоже, что память не хранится ни в каких кэшах или внутреннем распределителе памяти Python, поскольку явный вызов gc.collect освобождает память.
Это происходит из-за того, что порог для сборки мусора (700, 10, 10) никогда не был достигнут?
Я поместил некоторый код после jsontest для имитации порога. Но это не помогло.