网站制作流程视频教程新北做网站
news/
2025/9/23 17:58:05/
文章来源:
网站制作流程视频教程,新北做网站,第一赢销网,有哪些网站或者公司招募做视频的目录
一、理论
1.Python垃圾回收机制 一、理论
1.Python垃圾回收机制
#xff08;1#xff09;引⽤计数器
1#xff09;环状双向链表 refchain 在python程序中创建的任何对象都会放在refchain链表中。
name david
age 20
hobby [篮球,游泳…
目录
一、理论
1.Python垃圾回收机制 一、理论
1.Python垃圾回收机制
1引⽤计数器
1环状双向链表 refchain 在python程序中创建的任何对象都会放在refchain链表中。
name david
age 20
hobby [篮球,游泳]
内部会创建⼀些数据【 上⼀个对象、下⼀个对象、类型、引⽤个数 】
name david
new name内部会创建⼀些数据【 上⼀个对象、下⼀个对象、类型、引⽤个数、val18】
age 20内部会创建⼀些数据【 上⼀个对象、下⼀个对象、类型、引⽤个数、items元素、元素个数 】
hobby [篮球,游泳]在C源码中如何体现每个对象中都有的相同的值PyObject结构体4个值。 有多个元素组成的对象PyObject结构体4个值 ob_size 。
2类型封装结构体
data 3.14内部会创建_ob_next refchain中的上⼀个对象_ob_prev refchain中的下⼀个对象ob_refcnt 1ob_type floatob_fval 3.14
3引⽤计数器
v1 3.14
v2 999
v3 (1,2,3)
当python程序运⾏时会根据数据类型的不同找到其对应的结构体根据结构体中的字段来进⾏创建相 关的数据然后将对象添加到refchain双线链表中。 在C源码中有两个关键的结构体PyObject、PyVarObject。 每个对象中有 ob_refcnt就是引⽤计数器值默认为 1 当有其他变量引⽤对象时引⽤计数器就会发 ⽣变化。
#引⽤
a 777
b a#删除引⽤
a 777
b a
del b # b变量删除b对应对象引⽤计数器-1
del a # a变量删除a对应对象引⽤计数器-1
# 当⼀个对象的引⽤计数器为0时意味着没有⼈再使⽤这个对象了这个对象就是垃圾垃圾回收。
# 回收1.对象从refchain链表移除2.将对象销毁内存归还。4循环引⽤问题
v1 [11,22,33] #refchain中创建一个列表对象由于v1对象所以列表引用对象计数器为1
v2 [44,55,66] #refchain中创建一个列表对象由于v2对象所以列表引用对象计数器为1
v1.append(v2) #把v2追加到v1中则v2对应的[44,55,66]对象的引用计数器增加1,最终为2
v2.append(v1) #把v1追加到v2中则v1对应的[11,22,33]对象的引用计数器增加1,最终为2del v1 #引用计数器-1
del v2 #引用计数器-1 2标记清除
⽬的为了解决引⽤计数器循环引⽤的不⾜。
实现在python的底层再维护⼀个链表链表中专⻔放那些可能存在循环引⽤的对象
list/tuple/dict/set。 在Python内部 某种情况 下触发回去扫描 可能存在循环应⽤的链表 中的每个元素检查是否有循环引⽤如果有则让双⽅的引⽤计数器 -1 如果是0则垃圾回收。
3分代回收
将可能存在循环应⽤的对象维护成3个链表
0代0代中对象个数达到700个扫描⼀次。
1代0代扫描10次则1代扫描⼀次。
2代1代扫描10次则2代扫描⼀次。 (4) 总结
在python中维护了⼀个refchain的双向环状链表这个链表中存储程序创建的所有对象每种类型的对
象中都有⼀个ob_refcnt引⽤计数器的值引⽤个数 1、-1 最后当引⽤计数器变为0时会进⾏垃圾回
收对象销毁、refchain中移除。但是在python中对于那些可以有多个元素组成的对象可能会存在循环引⽤的问题为了解决这个问题
python⼜引⼊了标记清除和分代回收在其内部为了4个链表
refchain
2代10⼨
1代10次
0代700个在源码内部当达到各⾃的阈值时就会触发扫描链表进⾏标记清除的动作有循环则各⾃-1。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/913392.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!