CPython解释器引用技术的两个问题-创新互联

引用技术的两个问题
一:循环引用的情况下,引用计数就不好使了。
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,循环引用会造成内存溢出)。

创新互联从2013年成立,先为锦州等服务建站,锦州等地企业,进行企业商务咨询服务。为锦州企业网站制作PC+手机+微官网三网同步一站式服务解决您的所有建站问题。

另外有需要云服务器可以了解下创新互联cdcxhl.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


标题名称:CPython解释器引用技术的两个问题-创新互联
本文URL:http://scyanting.com/article/cdjpig.html