**Python垃圾回收机制
Python GC主要使用引用计数(reference counting)来跟踪和回收垃圾。
在引用计数的基础上,通过“标记-清除”(mark and sweep)解决容器对象可能产生的循环引用问题,通过“分代回收”(generation collection)以空间换时间的方法提高垃圾回收效率。
1 引用计数
PyObject是每个对象必有的内容,其中ob_refcnt
就是做为引用计数。当一个对象有新的引用时,它的ob_refcnt
就会增加,当引用它的对象被删除,它的ob_refcnt
就会减少.引用计数为0时,该对象生命就结束了。
优点:
- 简单
- 实时性
缺点:
- 维护引用计数消耗资源
- 循环引用(reference cycle)。举个例子,假设有两个对象
o1
和o2
,而且符合o1.x == o2
和o2.x == o1
这两个条件。如果o1
和o2
没有其他代码引用,那么它们就不应该继续存在。但它们的引用计数都是1。垃圾回收器会定时寻找这个循环,并将其回收。
2 标记-清除机制
基本思路是先按需分配,等到没有空闲内存的时候从寄存器和程序栈上的引用出发,遍历以对象为节点、以引用为边构成的图,把所有可以访问到的对象打上标记,然后清扫一遍内存空间,把所有没标记的对象释放。
3 分代技术
分代回收的整体思想是:将系统中的所有内存块根据其存活时间划分为不同的集合,每个集合就成为一个“代”,垃圾收集频率随着“代”的存活时间的增大而减小,存活时间通常利用经过几次垃圾回收来度量。
Python默认定义了三代对象集合,索引数越大,对象存活时间越长。
举例: 当某些内存块M经过了3次垃圾收集的清洗之后还存活时,我们就将内存块M划到一个集合A中去,而新分配的内存都划分到集合B中去。当垃圾收集开始工作时,大多数情况都只对集合B进行垃圾回收,而对集合A进行垃圾回收要隔相当长一段时间后才进行,这就使得垃圾收集机制需要处理的内存少了,效率自然就提高了。在这个过程中,集合B中的某些内存块由于存活时间长而会被转移到集合A中,当然,集合A中实际上也存在一些垃圾,这些垃圾的回收会因为这种分代的机制而被延迟。
转载于:https://www.cnblogs.com/wumingxiaoyao/p/7027071.html
**Python垃圾回收机制相关推荐
- python 释放变量所指向的内存_通俗易懂的Python垃圾回收机制及内存管理
Python垃圾回收机制及内存管理 内存管理: 先定义一个变量 name='wxl' 那么python会在内存中开辟一小块区域存放"wxl",此时变量的值是我们真正想要存储的,wx ...
- python是不是特别垃圾-谈谈python垃圾回收机制
什么是垃圾回收机制? 首先,咱先来解释名词,垃圾回收是不是就是将没用的,废弃的东西回收起来. 在坐的各位都没有女朋友对吧,那难以想象你们的房间会是一个什么样子,可能会有很多垃圾,很凌乱,自己也不收拾. ...
- python垃圾回收离职_谈谈python垃圾回收机制
什么是垃圾回收机制? 首先,咱先来解释名词,垃圾回收是不是就是将没用的,废弃的东西回收起来. 在坐的各位都没有女朋友对吧,那难以想象你们的房间会是一个什么样子,可能会有很多垃圾,很凌乱,自己也不收拾. ...
- python垃圾回收机制原理_如何理解和掌握Python垃圾回收机制?
在编程世界里,当一个对象失去引用或者离开作用域后,它就会被当做垃圾而被自动清除,这就是垃圾回收机制.在现在的高级语言如Python.Java都使用了垃圾回收机制,不过与Java采用的垃圾收集机制不同, ...
- python 垃圾回收机制
DAY 18. python垃圾回收机制 python GC主要有三种方式 引用计数 标记清除 分代回收 其中,以引用计数为主. 18.1 引用计数(Reference Counting) <寻 ...
- python多线程详解 Python 垃圾回收机制
文章目录 python多线程详解 一.线程介绍 什么是线程 为什么要使用多线程 总结起来,使用多线程编程具有如下几个优点: 二.线程实现 自定义线程 守护线程 主线程等待子线程结束 多线程共享全局变量 ...
- python垃圾回收机制
python垃圾回收机制 现在的高级语言如java,c#等,都采用了垃圾收集机制,而不再是c,c++里用户自己管理维护内存的方式.自己管理内存极其自由,可以任意申请内存,但如同一把双刃剑,为大量内存泄 ...
- 趣谈Python垃圾回收机制
今天唠点啥 上次发文看到有位朋友评论"来了,来了,他来了",哈哈哈哈觉得挺逗.确实,老Amy今天又来啦[此处应该有掌声]~ 我就寻思着,上篇文章车都开稳了,今天要怎么假装" ...
- Python垃圾回收机制详解
一.垃圾回收机制 Python中的垃圾回收是以引用计数为主,分代收集为辅.引用计数的缺陷是循环引用的问题. 在Python中,如果一个对象的引用数为0,Python虚拟机就会回收这个对象的内存. #e ...
- python垃圾回收机制(GC)相关问题
在使用python中很少遇到内存溢出的问题,也不关心内存的管理问题,这是高级语言自带的处理机制,将内部的垃圾空间清除. 要清楚是怎么回收垃圾的,那我们应该先明白什么情况下产生垃圾,就涉及到python ...
最新文章
- Android BaseAdapter和ViewHolder 优化 解决ListView的item抢焦点问题和item错乱问题
- 笔记-项目质量管理-编制质量管理计划的工具与技术
- Qt Creator桌面平台
- 为什么老师批改完试卷,分数下要画两条横线?今天终于知道了!
- Spark 机器学习中的线性代数库
- 信息学奥赛一本通 1105:数组逆序重存放 | OpenJudge NOI 1.6 04
- C# 中的 ConfigurationManager类引用方法应用程序配置文件App.config的写法
- html算命源码,index.html
- java进程宕机生产core_Java应用/JVM宕机排查步骤操作
- 结构化分析和面向对象分析的区别 例子_淘宝客佣金是什么意思?跟淘宝客服务费有什么区别?-【邯郸seo】...
- uvaoj 10066 - The Twin Towers 最长公共子序列(LCS)
- 网易Python爬虫:爬取网易科技频道文章存入MySQL数据库
- 搜索Instagram用户名API
- 助你上手Vue3全家桶之Vue3教程
- OpenWrt——进行PPPoE拨号时透过路由器访问光猫的方法
- OAuth2的运行机制(GitHub单点登录)
- 梦想照进现实的百度Apollo,越来越近的无人驾驶时代
- 青少年CTF--misc部分题解
- tcp 如何维护长连接
- dvwa之 file upload (low)一句话木马和中国菜刀
热门文章
- b站前端大佬_最强UP主:罗翔老师,你凭什么打败B站千万粉大佬老番茄?
- UITableView 调整 Header 层级关系
- (iOS-框架封装)AFN3.x 网络请求封装
- JavaScript基础,Cookies,Sessions
- 借条的注意事项,上面不能有这3个字
- 展开被 SpringBoot 玩的日子 《 二 》 WEB 开发
- 自定义checkbox,redio等
- iOS开篇——UI之UIStepper (计步器)
- AndroidStudio(1 下载安装,环境搭建,使用设置)
- linux 知识汇总