Объем памяти Python по сравнению с размером кучи
У меня возникли проблемы с памятью при использовании сценария Python для выдачи большогоsolr запрос. Я используюsolrpy библиотека для взаимодействия с сервером solr. Запрос возвращает около 80000 записей. Сразу после выдачи запроса объем памяти Python, просматриваемый с помощью всплывающих подсказок, достигает ~ 190 МБ.
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
8225 root 16 0 193m 189m 3272 S 0.0 11.2 0:11.31 python
...
На этом этапе профиль кучи, если смотреть через heapy, выглядит следующим образом:
Partition of a set of 163934 objects. Total size = 14157888 bytes.
Index Count % Size % Cumulative % Kind (class / dict of class)
0 80472 49 7401384 52 7401384 52 unicode
1 44923 27 3315928 23 10717312 76 str
...
Объекты Unicode представляют уникальные идентификаторы записей из запроса. Стоит отметить, что общий размер кучи составляет всего 14 МБ, тогда как python занимает 190 МБ физической памяти. Как только переменная, хранящая результаты запроса, выходит из области видимости, профиль кучи правильно отражает сборку мусора:
Partition of a set of 83586 objects. Total size = 6437744 bytes.
Index Count % Size % Cumulative % Kind (class / dict of class)
0 44928 54 3316108 52 3316108 52 str
Тем не менее, объем памяти остается неизменным:
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
8225 root 16 0 195m 192m 3432 S 0.0 11.3 0:13.46 python
...
Почему существует такое большое несоответствие между объемом физической памяти python и размером кучи python?