我的问题是,为什么python在gc中同时使用引用计数和标记和清除?为什么不只是标记和清除呢?
我最初的猜测是,使用引用计数可以很容易地删除非循环引用的对象,这可能会在一定程度上加快标记和清除速度,并立即获得内存。不知道我的猜测是否正确?
有什么想法吗?
非常感谢。
发布于 2012-01-30 20:22:03
Python (语言)没有说明它使用的是哪种形式的垃圾收集。主实现(通常称为CPython)按照您所描述的那样工作。其他版本,如Jython或IronPython,使用纯粹的垃圾收集系统。
是的,早期收集引用计数是有好处的,但CPython使用它的主要原因是历史原因。最初,循环对象没有垃圾回收,因此循环导致内存泄漏。APIs和数据结构在很大程度上是基于引用计数的原则。当添加真正的垃圾收集时,不能选择破坏现有的二进制API和所有依赖于它们的库,因此必须保留引用计数。
https://stackoverflow.com/questions/9062209
复制相似问题