python中循环引用以及标记清除的问题分析
发表于:2025-11-13 作者:千家信息网编辑
千家信息网最后更新 2025年11月13日,这篇文章主要介绍python中循环引用以及标记清除的问题分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!=1 在循环引用的情况下,引用计数就不好事了,这时候就需要用到标记清除
千家信息网最后更新 2025年11月13日python中循环引用以及标记清除的问题分析
这篇文章主要介绍python中循环引用以及标记清除的问题分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!
=
1 在循环引用的情况下,引用计数就不好事了,这时候就需要用到标记清除
循环引用的危害: 会造成内存溢出,因为循环引用计数不可能为零解决方法: 标记清除
2 关于标记清除的效率问题(低)
引用计数引用一次就加1,值减到0以后就应该被回收,那这里就产生了一个问题cpython的垃圾回收机制不是无时无刻都在运行的,是隔一段时间运行一次,这里就会产生一个效率问题为了保证效率cpython用了分代回收,就提升了效率分代回收: 1 老年代:常用的数据 老年代扫描的频率(比如一个小时扫描一次)就可能相对的低一些,一些旧的数据可能还在用,所以扫描的就相对较低 2 年轻代: 新生的数据 年轻带扫描的频率(比如5分钟扫描一次)就可能会相对高一些, 因为一些新的数据刚刚产生可能就被抛弃了,这样就可以及时的清理内存空间
关于标记清除:
首先我们说一下变量的概念: 1 变量名: 不存值,只是指向一个内存地址 2 赋值符号 3 变量值: 这里才是存放数据的地方变量我们是存在内存当中的,变量名存放的地方栈, 变量值放的地方是堆我们只能操控堆,也就是变量值,不能操控变量名存放的地方比如: x = 1 x = 2 x最终等于了2 , 因为x指向的内存地址改变了我们都是通过变量名去访问值,它会有一个标记的过程,存在于栈区的对象叫做GC Roots对象它会扫描栈区(变量名)里所有的内容,将所有栈区里的对象直接或间接访问的对象标记为存活对象,其余的都为非存活,应该被清除比如: l1 = [1] l2 = [2] l1.append(l2) l2.append(l1) del l1 del l2 什么是GC Roots可达的对象? 通过栈区(变量名)可到达(访问)的对象,就叫GC Roots可达的对象,l1 就是一个GC Roots,del把l1与指向的内存地址给解除了绑定,l1就没有引用计数了
以上是"python中循环引用以及标记清除的问题分析"这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注行业资讯频道!
标记
变量
对象
内存
问题
循环
数据
地方
效率
内容
地址
指向
量值
分析
年轻
年代
篇文章
频率
运行
无时无刻
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
保障服务器安全的意义
一进游戏服务器就高负载怎么回事
神经网络技术路线图
sql数据库排序规则
struts2查询数据库
pe怎么更改服务器管理员密码
mysql数据库培训课程
行业软件开发订制
5g网络技术基础
浦东新区品牌软件开发咨询热线
做软件开发是学什么专业
陌生服务器2019
二滩水电站网络安全
公众号启用服务器配置
bubble软件开发
现在软件开发流行技术
流媒体服务器配置有要求吗
软件开发中出现开发时间过长
如何用废旧手机制作服务器
怎么查看数据库表的建表语句
本地数据库管理
什么软件可以模拟服务器
游戏软件开发服务器
山东亚讯互联网科技集团
浙江网络技术公司怎么样
网络安全四道防线是什么
学习过软件开发吗
流媒体服务器配置有要求吗
金蝶软件开发合同范本
重庆千品汇互联网科技有限公司