是否可以在Pharo中垃圾收集某个对象?
E.g。我知道某个对象不是(不应该)被任何其他对象引用。它需要很大的空间。在系统上运行常规垃圾收集是否有意义?或者可以从堆中删除特定的对象/树
答案 0 :(得分:5)
Smalltalk垃圾收集器不能只收集一个对象。
使用了两种基本技术 - 生成清除和标记和扫描。生成清理通过将使用过的对象复制到另一个未使用的空间并忽略所有垃圾来处理新对象和相对较新的对象。被复制很多次的对象被移动到#34;旧空间"。旧空间是通过标记和扫描算法收集的垃圾。该算法循环遍历所有Smalltalk对象并将其标记为"未标记"。然后遍历所有可访问的对象并将其标记为"标记为"。在最后的扫描中,任何仍然标记为"未标记的"被释放了。
无法在单个对象上运行任何算法。
答案 1 :(得分:2)
不,它没有意义,也是不可能的。
手动运行垃圾收集器也是没有意义的(当然,你可以这样做)...系统应该在需要时运行gc,你将获得该空间。
gc的全部目的是你没有来照顾它。
答案 2 :(得分:0)
我认为您正在寻找参考列表。
(即哪个对象保持您的对象不被垃圾收集)。
可能是某个地方的全局变量。类变量中的东西......