因此有时您会在 Pharo 中看到“空间不足”对话框。是否有可能以某种方式确定是什么占用了这么多空间?
最佳答案
这不是一个简单的问题,因为在收集信息的过程中,您可能会超出最大空间量。
您可以修改 SmalltalkImage>>lowSpaceThreshold
以获得更多的实验空间。
您还可以查看SmalltalkImage>>memoryHogs
。该类变量将由虚拟机(我认为)使用顶级内存消耗对象(如果可以识别这样的对象)来填充。
如果您无法精确定位大型对象的单个实例,您可以做的另一件事是查看所有类的所有实例的数量。这需要一点空间,你应该小心。但这里有一些可以工作的代码(仅限于有趣的包):
classes := Class allSubclasses select: [ :class | class name beginsWith: 'AB' ].
(classes collect: [ :class | class -> class allInstances size ]) inspect.
然后,还有TBehavior>>instancesSizeInMemory
和Object>>sizeInMemory
。如果您在图表上运行它们,它们确实会使您的图像崩溃(您必须自己实现),但它们可以很好地指示哪些对象消耗了多少内存。
您可以将上面的代码修改为以下代码来获取实例的大小:
classes := Class allSubclasses select: [ :class | class name beginsWith: 'AB' ].
(classes collect: [ :class | class -> class instancesSizeInMemory ]) inspect.
注意:代码示例适用于 Pharo4。
关于memory - 如何识别 "Space is low"原因,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28657762/