15

估计对象内存占用的好方法是什么?

相反,测量足迹的好方法是什么?

例如,假设我有一个字典,其值是整数、浮点元组列表:

d['key'] = [ (1131, 3.11e18), (9813, 2.48e19), (4991, 9.11e18) ]

我有 4G 的物理内存,想弄清楚在我溢出到交换之前我可以在内存中存储多少行(键:值)。这是在 linux/ubuntu 8.04 和 OS X 10.5.6 上。

另外,找出程序实际内存占用的最佳方法是什么?我如何最好地弄清楚它何时耗尽物理内存并溢出?

4

2 回答 2

10

Guppy有一个很好的内存分析器(Heapy):

>>> from guppy import hpy
>>> hp = hpy()
>>> hp.setrelheap() # ignore all existing objects
>>> d = {}
>>> d['key'] = [ (1131, 3.11e18), (9813, 2.48e19), (4991, 9.11e18) ]
>>> hp.heap()
 Partition of a set of 24 objects. Total size = 1464 bytes.
 Index  Count   %     Size   % Cumulative  % Kind (class / dict of class)
     0      2   8      676  46       676  46 types.FrameType
     1      6  25      220  15       896  61 str
     2      6  25      184  13      1080  74 tuple
 ...

Heapy 的文档有些不足,因此您可能需要深入研究网页或源代码,但它非常强大。还有一些可能相关的文章。

于 2009-04-14T22:53:08.783 回答
5

您可以使用内存分析器执行此操作,我知道其中有几个:

  1. PySizer - 可能已经过时,正如主页现在建议的那样:

这可能是这个问题的重复。

于 2009-04-14T22:46:55.617 回答