码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • python学习03垃圾回收机制


    ‘’’
    1、引用计数
    2、标记-清除
    3、分代回收

    python中垃圾回收机制GC主要使用引用计数进行垃圾回收,通过标记-清除解决容器对象产生循环引用的问题,通过
    分代回收以空间换时间的方式提高垃圾回收的效率

    python对象的核心是Pyobject结构体,该结构体通过ob_refcnt实现变量的引用计数
    结构体如下:
    typedef struct_object{
    int ob_refcnt
    struct_typeobject *ob_type;
    }
    程序在运行过程中会实时的更新ob_refcnt的值,来反应引用当前对象的名称和数量
    当对象的引用计数值为0,那么它的内存就会被立即释放掉,即被垃圾回收

    以下情况是导致引用计数加1的情况:
    1、对象被创建,如a = 2333
    2、对象被引用,如b = a
    3、对象作为参数,传入到一个函数中
    4、对象作为元素,存储在容器中

    以下情况会导致引用计数减1:
    1、对象别名被显示销毁del
    2、对象别名被赋予新的对象
    3、一个对象离开它的作用域
    4、对象所在的容器被销毁或者是从容器中删除对象
    可以通过sys包中的1getrefcount()来获取一个名称所引用的对象当前的引用计数
    getrefcount()本身会使得引用计数加1
    ‘’’
    #引用计数无法解决容器对象循环引用的问题

    a = [1,2]
    b = [2,3]
    a.append(b)
    b.append(a)
    del a
    del b```
    
    #循环使用导致计数永不为0
    
    #标记清除是一种优化策略,分为标记和清除两个阶段
    #标记阶段,遍历所有对象,如果对象是可达的,还有对象引用它,标记该对象为可达
    #清除阶段,再次遍历对象,如果发现某个对象没有标记为可达,否则就将其回收
    #标记-清除垃圾回收的阶段,会暂停整个应用程序,等待标记清除结束后才会恢复应用程序的运行
    '''
    分代回收,以空间换时间的方式提高垃圾回收的效率
    对于程序,存在一定比例的内存块生命周期比较短,而剩下的内存块,生命周期比较长。对象存在时间越长,越
    不可能是垃圾,应该减少回收。
    python有三种世代(0,1,2),某个变量在第0代扫描中存在,将被移至一代,被扫描的次数将会减少,如果又
    活过了一代gc,将被移动至2代,在2代中被扫描的次数将会更少。
    '''
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
  • 相关阅读:
    本教程旨在为正在构建,部署和使用CarbonData的最终用户和开发人员提供故障排除。
    推荐系统[八]算法实践总结V1:淘宝逛逛and阿里飞猪个性化推荐:召回算法实践总结【冷启动召回、复购召回、用户行为召回等算法实战】
    【设计模式】策略模式在项目中的实战运用
    【深度学习】实验4布置:脑部 MRI 图像分割
    Python面试题大全总结
    创建文件夹
    解决虚拟机重启后ifconfig看不到IP的问题
    CNN(卷积神经网络)、RNN(循环神经网络)和GCN(图卷积神经网络)
    如何接入淘宝电商平台item_review-API接口获得淘宝商品评论
    通过IP地理位置阻止网络攻击
  • 原文地址:https://blog.csdn.net/mitudeniu/article/details/126474384
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号