该策略在进行垃圾回收时分成了两步,分别是:
- 标记阶段,遍历所有的对象,如果是可达的(reachable),也就是还有对象引用它,那么就标记该对象为可达;
- 清除阶段,再次遍历对象,如果发现某个对象没有标记为可达,则就将其回收
文章插图
可达(活动)对象:从root集合节点有(通过链式引用)路径达到的对象节点
不可达(非活动)对象:从root集合节点没有(通过链式引用)路径到达的对象节点
流程:
- 首先,从root集合节点出发,沿着有向边遍历所有的对象节点
- 对每个对象分别标记可达对象还是不可达对象
- 再次遍历所有节点,对所有标记为不可达的对象进行垃圾回收、销毁 。
并且标记-清除工作时会暂停整个应用程序,等待标记清除结束后才会恢复应用程序的运行 。
5.3 分代回收策略分代回收建立标记清除的基础之上,因为我们的标记-清除策略会将我们的程序阻塞 。
简单来说就是:对象存在时间越长,越可能不是垃圾,应该越少去收集
那什么时候会触发分代回收呢?
import gcprint(gc.get_threshold())# (700, 10, 10)# 上面这个是默认的回收策略的阈值# 也可以自己设置回收策略的阈值gc.set_threshold(500, 5, 5)
- 700:表示当分配对象的个数达到700时,进行一次0代回收
- 10:当进行10次0代回收以后触发一次1代回收
- 10:当进行10次1代回收以后触发一次2代回收
文章插图
5.4 gc模块
- gc.get_count():获取当前自动执行垃圾回收的计数器,返回一个长度为3的列表
- gc.get_threshold():获取gc模块中自动执行垃圾回收的频率,默认是(700, 10, 10)
- gc.set_threshold(threshold0[,threshold1,threshold2]):设置自动执行垃圾回收的频率
- gc.disable():python3默认开启gc机制,可以使用该方法手动关闭gc机制
- gc.collect():手动调用垃圾回收机制回收垃圾
文章插图
原文链接:
https://blog.51cto.com/u_14666251/4674779
【Python垃圾回收机制,人生苦短,只谈风月,谈什么回收?】
推荐阅读
- Python实现天气查询功能
- 用Python爬取六大平台的弹幕、评论,看这一篇就够了
- Python 中的自然语言处理入门
- 用python帮别人写了个文字识别程序
- 3个提升Python运行速度的方法,很实用
- 手把手教你编写Python抢购脚本
- Python生成遍历暴力破解密码,实战的效果差强人意了
- 详解Python软件安装教程和配置,小白都能看懂的教程,值得收藏
- 被称之为永远的神!就这6个Python爬虫开源项目?
- Python黑科技:暴力破解,你的密码是否安全呢?