python中循环引用以及标记清除的问题分析
发表于:2025-01-20 作者:千家信息网编辑
千家信息网最后更新 2025年01月20日,这篇文章主要介绍python中循环引用以及标记清除的问题分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!=1 在循环引用的情况下,引用计数就不好事了,这时候就需要用到标记清除
千家信息网最后更新 2025年01月20日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安全错误
数据库的锁怎样保障安全
oracle数据库每年费用
常用的数据库类型有哪几种
千锋教育网络安全多少钱
宿豫区工业网络技术大概费用
软件开发自动化工具
传统服饰京绣艺术数据库建设
大二层网络技术的应用
青岛网络安全网络靶场
起点读书软件开发
嵌入式软件开发主要干什么
数据库显示无服务
邮箱服务器验证失败啥意思
东软网络安全事业部总经理
安全wifi服务器地址
同时打开微信数据库
恩施服务器回收免费咨询
ehs网络安全
数据库恢复技术建立检查点
通信网络技术的发展趋势
教育部小学生网络安全知识
软件开发税率免税
济宁智慧城管软件开发专业制作
黑客攻击企业服务器是否犯罪
未来软件开发趋势
网络安全有可查性吗
国际服服务器1.17.10推荐
网络安全审查意见范文
网络技术是物联网技术吗
教育部小学生网络安全知识
华为服务器管理口图