Осуществляется ли освобождение по-разному для маленьких / больших массивов numpy?

Я пытаюсь отладить проблему с памятью в моем большом приложении Python. Большая часть памяти находится вnumpy массивы, управляемые классами Python, такбесформенный и т.д. бесполезны, так как они не учитывают память вnumpy массивы. Поэтому я попытался вручную отслеживать использование памяти с помощью MacOSX (10.7.5) Activity Monitor (илиtop если вы будете). Я заметил следующее странное поведение. На нормальномpython оболочка интерпретатора (2.7.3):

import numpy as np # 1.7.1
# Activity Monitor: 12.8 MB
a = np.zeros((1000, 1000, 17)) # a "large" array
# 142.5 MB
del a
# 12.8 MB (so far so good, the array got freed)
a = np.zeros((1000, 1000, 16)) # a "small" array
# 134.9 MB
del a
# 134.9 MB (the system didn't get back the memory)
import gc
gc.collect()
# 134.9 MB

Независимо от того, что я делаю, объем памяти сессии Python никогда не опустится ниже 134,9 МБ. Итак, мой вопрос:

Почему ресурсы массивов размером более 1000x1000x17x8 байтов (найденных эмпирически в моей системе) должным образом возвращаются обратно в систему, в то время как память меньших массивов, похоже, навсегда застряла с интерпретатором Python?

Похоже, это усиливается, поскольку в моих реальных приложениях у меня больше 2 ГБ памяти, которую я никогда не смогу получить от интерпретатора Python. Это предполагаемое поведение, которое Python резервирует все больше и больше памяти в зависимости от истории использования? Если да, то Activity Monitor так же бесполезен, как и Heapy для моего случая. Есть ли что-нибудь, что не бесполезно?

Ответы на вопрос(1)

Ваш ответ на вопрос