注意:这是我第一次尝试使用Python进行内存分析,所以也许我在这里提出错误的问题。建议重新改善这个问题。
我正在处理一些代码,我需要在set
中存储几百万个小字符串。根据{{1}},这使用heapy报告的内存量的约3倍。我不清楚所有这些额外的内存是用于什么以及我如何去弄清楚我是否可以 - 如果是这样 - 如何减少占用空间。
memtest.py:
top
输出结果为:
from guppy import hpy
import gc
hp = hpy()
# do setup here - open files & init the class that holds the data
print 'gc', gc.collect()
hp.setrelheap()
raw_input('relheap set - enter to continue') # top shows 14MB resident for python
# load data from files into the class
print 'gc', gc.collect()
h = hp.heap()
print h
raw_input('enter to quit') # top shows 743MB resident for python
总而言之,heapy显示264MB,而top显示743MB。什么使用额外的500MB?
更新
我在Windows 7的VirtualBox中在Ubuntu 12.04上运行64位python
我根据答案here安装了孔雀鱼
$ python memtest.py
gc 5
relheap set - enter to continue
gc 2
Partition of a set of 3197065 objects. Total size = 263570944 bytes.
Index Count % Size % Cumulative % Kind (class / dict of class)
0 3197061 100 263570168 100 263570168 100 str
1 1 0 448 0 263570616 100 types.FrameType
2 1 0 280 0 263570896 100 dict (no owner)
3 1 0 24 0 263570920 100 float
4 1 0 24 0 263570944 100 int