引用计数删除东西似乎比标记和清除垃圾收集器快得多,因为一旦不再使用,就可以释放东西并回收内存。mark-and-sweep 旨在解决的问题是捕获循环引用,但作为交换,您必须遍历整个对象树,并且在发生这种情况时其他一切都必须暂停。
仅在内存不足时保持引用计数并定期使用标记和清除不是更好吗?Mark-and-sweep GC 暂停是一个很大的痛苦,而且很难预测或避免。如果引擎也支持引用计数,它可能会大大减少对它们的需求——如果你小心避免循环引用,甚至可以减少到零。
我注意到Python 使用了这种方案,但可能更多是出于历史原因,而不是作为刻意的性能决定。