如何确定"Space is low"原因



所以有时在Pharo中会出现"Space is low"对话框。有可能以某种方式确定是什么占据了这么多空间吗?

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

有一个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。

相关内容

最新更新