My initial guess is that using reference counting can easily remove non-cyclic referenced objects, this may somewhat speed up mark-and-sweep and gain memory immediately. Don't know if my guess is right?
是的。只要refcount变为零并且对象可以被移除。这不会发生在循环引用对象中。AFAIK,mark and sweep是一个代价高昂的操作,实现它的最简单方法是在标记对象时“停止世界”。当遍历所有对象时,将释放未标记(可到达)的安迪对象。
Python(该语言)没有说明它使用哪种形式的垃圾收集。主要实现(通常称为CPython)的作用如您所描述的。其他版本,如Jython或IronPython,使用纯垃圾收集系统。
是的,早期收集引用计数有一个好处,但CPython使用它的主要原因是历史的。最初没有循环对象的垃圾收集,因此循环导致内存泄漏。C API和数据结构主要基于引用计数的原则。当添加真正的垃圾收集时,不能中断现有的二进制api和依赖它们的所有库,因此必须保留引用计数。
引用计数比垃圾收集更快地释放对象。
但是由于引用计数无法处理无法访问的对象之间的引用循环,因此Python使用垃圾收集器(实际上只是一个循环收集器)来收集存在的那些循环。
是的。只要refcount变为零并且对象可以被移除。这不会发生在循环引用对象中。AFAIK,mark and sweep是一个代价高昂的操作,实现它的最简单方法是在标记对象时“停止世界”。当遍历所有对象时,将释放未标记(可到达)的安迪对象。
相关问题 更多 >
编程相关推荐