CPython 解释器 引用技术的两个问题
admin
2023-07-11 19:45:26
0次

引用技术的两个问题
一:循环引用的情况下,引用计数就不好使了。
a="x"
b=a
a=b
解决方法:
标记清除变量的概念:
变量:是由3个部分组成,1、变量名 2、赋值符号 3、变量值
变量都是内在内存中的,在内存中有划分:
栈:变量名(不存值,只是指向一个内存地址)
堆:变量值 --程序员只操控堆,也就是变量值,无法操控栈区。

比如:x="10" , x="20" 这就意味着 变量的值换了一个内存地址。

我们都是通过变量名(栈)访问的变量值(堆)
标记的过程:扫描栈区里所有的内容,将所有栈区的对像,将直接或间接访问的对像标记成存活对像,其余的都为非存活,应该被清除。

通过栈区可到达的对像是gc roots对像


标记清除:


二:效率问题(低), 引用计数引用一次,值就加1,减少就减一 (分代回收解决)
cpython不是时刻都在回收,而是隔一段时间去回收一次,这样就保证效率,cpython使用了分代回收,
1、老年代: 扫描频率比较低(可能是隔1小时扫描一次)
老的数据可能还在经常用

2、年轻代: 扫描频率比较高(可能是隔5分钟扫描一次)
因为新的数据用一次就不用了,可能会被抛弃,这样有利于内存空间的整理

这样就提升扫描效率

cpython 解释器垃圾回收机制是,如果计数引用为零的话会回收,但这样的话,循环引用就无法回收了(计数不可能为0,循环引用会造成内存溢出)。




相关内容

热门资讯

空调连续工作多久需要停机休息 空调连续工作的时间取决于多个因素,包括空调的型号、功率、使用环境和维护情况等。一般来说,空调可以连续...
空调哪个符号是除湿的 空调除湿功能通常用一个水滴形状的符号表示。不同品牌和型号的空调遥控器可能会有所差异,但一般来说,除湿...
格力空调多长时间加一次氟利昂 1、一般情况下,空调对氟利昂的使用量是非常小的,所以在空调使用了四年左右的时候再考虑加也没问题。2、...
空调用多长时间需要加氟一次 一般情况下是五年。当出现以下这几种情况时,空调才需要加氟。1、空调的室内机和室外机各有两个接口,当接...
格调生活·C标思享荟:卡萨帝在... 9月12日的郑州龙湖金融岛,夜风轻拂,灯光璀璨。“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑...
品牌价值破千亿、高端份额持续领... 9月12日,“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑州站”在郑州龙湖金融岛举办。2026...
空调主板坏了修800还是换新的 空调主板坏了是修还是换新,需要考虑多个因素,以下是一些建议:1. 维修成本:如果维修费用较低,比如 ...
空调开多久需要休息多长时间 问题:空调开多久需要休息多长时间回答:1、在使用空调的过程中,一般空调开7~8个小时左右需要休息2~...
中央空调多长时间清洗一次 1、一般空调开机前清洗一次即可,空调开机中间时段再清洗一次,空调关机时清洗一次,这样比较合理。2、空...
中央空调氟利昂多久加一次 看空调制热和制冷程度,很多人的观点认为氟利昂必须一年放一次,其实这个观点是错误的,理解上面有点偏差,...