所以有时你会在Pharo中得到“Space is low”对话框。是否有可能以某种方式确定占用那么多空间的东西?
答案 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>>instancesSizeInMemory
和Object>>sizeInMemory
。如果你在图形上运行它们,这些可能会使图像崩溃(你自己必须自己实现),但是它们可以很好地指示哪些对象消耗了多少内存。
您可以调整上面的代码以获取实例的大小:
classes := Class allSubclasses select: [ :class | class name beginsWith: 'AB' ].
(classes collect: [ :class | class -> class instancesSizeInMemory ]) inspect.
注意:代码示例适用于Pharo4。