python 垃圾回收

 

Python中垃圾回收机制,以引用计数器为主,标记清除和分代回收为辅。 一般来说,通过引用计数器即可解决变量使用,但如果是互相引用的数据类型就需要标记清除的技术,分代回收是解决什么时候清除,清除多少

 

引用计数器

在python 中维护了一个 refchain的双向环状链表

 

标记清除

如果对象进行循环引用,仅通过引用计数器来回收,会造成部分引用计数器不为0,则一直占用内存。 Python中便引入了标记清除的技术,针对可能存在的循环引用的对象进行特殊的处理(列表、元祖、字典、集合等可以嵌套的对象)。

        标记清除:创建特殊链表专门保存列表、元祖、字典、集合等对象,之后去检查这个链表中的对象是否存在循环引用,如果存在则双方的引用器互相-1.

分代回收

有了标记清除的技术可以解决引用计数器的问题,那么什么时候进行清除又是一个问题,Python底层提供了分代回收的技术解决什么时候进行清除,到多少才清除。

        分代回收:对标记清除中的链表进行优化,将那些可能存在循环引用的对象拆分为3个链表,0、1、2三代,每代都可以存储对象和阈值,就会对相应的链表中的每个对象做一次扫描,除循环引用各自-1并且销毁引用计数器为0的对象。

 

缓存

反复的创建和销毁会使程序执行效率低下,Python引入了缓存机制

参考:https://blog.csdn.net/Uncle_wangcode/article/details/138162629

posted @ 2024-11-13 10:49  钟鼎山林  阅读(15)  评论(0编辑  收藏  举报