如何识别 "Space is low" 原因

How to identify "Space is low" cause

所以有时您会在 Pharo 中看到 "Space is low" 对话框。是否有可能以某种方式确定是什么占用了那么多 space?

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

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

你也可以看看SmalltalkImage>>memoryHogs。 class 变量将由 VM(我认为)填充内存消耗最多的对象(如果可以识别此类对象)。

如果您无法确定大型对象的单个实例,您可以做的另一件事是查看所有 classes 的所有实例的数量。这需要一点space,你应该小心。但是这里有一些可以工作的代码(仅限于有趣的包):

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。