Раздутие памяти Python json

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 для имитации порога. Но это не помогло.

5
задан Gareth Rees 30 June 2011 в 15:17
поделиться