1

通过引用计数,对象可以在不再被引用后立即被回收。它不需要为 GC 运行单独的线程。其他的GC方法,比如mark和sweep,都是在自己的线程上运行的,我们无法确定它什么时候运行。也许函数返回时会回收最年轻的一代,但其他一些推送到下一代的对象也可能是垃圾。

是否有任何其他 GC 方法可以在确定的时间回收对象?

4

1 回答 1

2

如果“在确定的时间”是指“在没有周期的情况下尽快”,那么不是。为此,您需要天真的引用计数,尽管存在所有问题,您甚至不能使用引用计数的任何优化(例如延迟引用计数)。

如果像“在范围结束时”这样的时间是可以接受的,那么是的,这是可能的(尽管不建议)。您只需运行当时拥有的任何形式的 GC。当然,这是非常低效的,这是没有人这样做的一个原因(另一个是唯一的优势,确定性清理,很少需要并且更好地明确处理)。增量 GC 可能会稍微缓解这一点,但我不确定能缓解多少。

于 2013-01-12T13:37:29.723 回答