Libertar é tratado de forma diferente para matrizes numpy pequenas / grandes?

Eu estou tentando depurar um problema de memória com o meu grande aplicativo Python. A maior parte da memória está emnumpy matrizes gerenciadas por classes Python,Heapy etc. são inúteis, uma vez que não consideram a memória nonumpy matrizes. Então eu tentei rastrear manualmente o uso da memória usando o Monitor de Atividade MacOSX (10.7.5) (outop Se você for). Eu notei o seguinte comportamento estranho. Em um normalpython shell de intérprete (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

Não importa o que eu faça, a pegada de memória da sessão do Python nunca ficará abaixo de 134,9 MB novamente. Então minha pergunta é:

Por que os recursos de matrizes maiores que 1000x1000x17x8 bytes (encontrados empiricamente no meu sistema) são devidamente devolvidos ao sistema, enquanto a memória de matrizes menores parece estar presa ao interpretador Python para sempre?

Isso parece aumentar, já que em meus aplicativos do mundo real, acabo com mais de 2 GB de memória que nunca consigo recuperar do interpretador Python. É esse comportamento pretendido que o Python reserva mais e mais memória dependendo do histórico de uso? Se sim, o Activity Monitor é tão inútil quanto o Heapy para o meu caso. Existe alguma coisa lá fora que não seja inútil?

questionAnswers(1)

yourAnswerToTheQuestion