python内存管理及垃圾回收机制

内存管理

python为了避免重复创建和销毁一些常见对象,内部维护了一些池
int 小数据池-5~257

str unicode_latin1[256]  字符池,字符串驻留机制
free_list(缓冲池)
float、
list、
tuple、(按元组内元素个数分别存储在free_list中)
dict、

垃圾回收机制

在python中维护了一个refchain的双向环状链表,这个链表中存储了程序创建的所有对象,
每种类型的对象中都有一个ob_refcnt(引用计数器)的值,对象每被引用一次,该对象的引用计数器加1,删除则引用计数器-1,
当引用计数器为0时,会进行垃圾回收(对象销毁,refchain移除)。
但是,在python中对于一些多个元素组成的对象可能会存在循环引用的问题,
为了解决这个问题,python又引入了标记清除和分代回收,在其内部维护了4个链表
refchain
2代 10次
1代 10次
0代 对象达到700时
当分代链表达到各自的阈值时,就会触发扫描链表进行标记清除的动作

(给有循环引用的对象的计数器各自-1,之后如果计数器为0,则进行垃圾回收,不为0,把该对象放入下一代)

posted @ 2020-08-13 13:40  左晓龙  阅读(71)  评论(0编辑  收藏  举报