如何识别“空间低”的原因

时间:2015-02-22 12:24:31

标签: memory memory-leaks pharo

所以有时你会在Pharo中得到“Space is low”对话框。是否有可能以某种方式确定占用那么多空间的东西?

1 个答案:

答案 0 :(得分:2)

这不是一个简单的问题,因为在收集信息的过程中,您可能会超出最大空间量。

您可以修改SmalltalkImage>>lowSpaceThreshold以获得更多实验空间。

你还可以做的是SmalltalkImage>>memoryHogs。该类变量将由VM填充(我认为),顶部内存消耗对象(如果可以识别这样的对象)。

如果您无法确定大型对象的单个实例,那么您可以做的另一件事就是查看所有类的所有实例的数量。这需要一些空间,你应该小心。但是这里有一些代码可以使用(限于有趣的包):

classes := Class allSubclasses select: [ :class | class name beginsWith: 'AB' ].
(classes collect: [ :class | class -> class allInstances size ]) inspect.

然后,还有TBehavior>>instancesSizeInMemoryObject>>sizeInMemory。如果你在图形上运行它们,这些可能会使图像崩溃(你自己必须自己实现),但是它们可以很好地指示哪些对象消耗了多少内存。

您可以调整上面的代码以获取实例的大小:

classes := Class allSubclasses select: [ :class | class name beginsWith: 'AB' ].
(classes collect: [ :class | class -> class instancesSizeInMemory ]) inspect.

注意:代码示例适用于Pharo4。