更多精彩内容,欢迎关注:

视频号
视频号

抖音
抖音

快手
快手

微博
微博

Python 垃圾回收机制详解

导读Python的GC模块主要运用了引用计数来跟踪和回收垃圾,通过“标记-清除”解决容器对象可能产生的循环引用问题,通过分代回收以空间换时间进一步提高垃圾回收的效率。

Python 的GC模块主要运用了引用计数来跟踪和回收垃圾;通过“标记-清除”解决容器对象可能产生的循环引用问题;通过分代回收以空间换时间进一步提高垃圾回收的效率。

也即采用“引用计数“为主(实时性,一旦没有引用,内存就直接释放了),“标记-清除”与“分代收集”两种机制为辅的策略。        

1. 引用计数

为每一个对象维护一个引用计数器,当一个对象的引用被创建或者复制时,(对象的引用)计数器+1,当一个对象的引用被销毁时,计数器的值-1,当计数器的值为0时,就意味着对象已经再没有被使用了,可以将其内存释放掉。

2. 标记-清除

“标记-清除”的出现打破了循环引用,也就是它只关注那些可能会产生循环引用的对象,Python中的循环引用总是发生在容器container对象之间,也就是能够在内部持有其他对象的对象(比如:list、dict、class等)。这也使得该方法带来的开销只依赖于容器对象的数量。

原理:

将集合中对象的引用计数复制一份副本,用于找寻root object集合(该set中的对象是不能被回收的)。当成功找到root object集合,首先将现在的内存链表一分为二,一条链表维护root object集合,成为root链表;另外一条维护剩下的对象,成为unreachable链表。

一旦在标记的过程中,发现现在在unreachable链表且可能存在被root链表中直接或间接引用的对象,就将其从unreachable链表中移到root链表中;当完成标记后,unreachable链表中剩下的所有对象就是垃圾对象了,接下来的垃圾回收只需限制在unreachable链表中即可。

缺点:

该机制所带来的额外操作和需要回收的内存块成正比。

3. 分代回收

活的越长的对象,就越不可能是垃圾,就应该减少对它的垃圾收集频率。

4. 其他4.1 JNI(Java Native Interface)

提供了若干的API,实现Java与其他语言的通信。

总结

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注好二三四的更多内容!

为你推荐
资讯专栏
热门视频
相关推荐
Python实现城市公交网络分析与可视化 Python数据分析处理(三)--运动员信息的分组与聚合 基于Python实现PDF区域文本提取工具 详解python的循环 python实现新年倒计时实例代码 Python实现消消乐小游戏 学习python的while循环嵌套 提升Python运行速度的5个小技巧 Python按键或值对字典进行排序 图像检索之基于vlfeat实现SIFT特征 python绘图中的四个绘图技巧 js中toString方法3个作用 信息系统项目管理师报考条件 信息系统项目管理师报考时间 信息系统项目管理师报名时间 信息系统项目管理师考试时间 pmp与信息系统项目管理师 信息系统项目管理师报考要求 信息系统项目管理师有效期 信息系统项目管理师考什么论文 python正则表达式语法学习笔记 一文秒懂python正则表达式常用函数 Python常用的正则表达式处理函数详解 JS截取字符串的三种方法详解 PHP遍历数组的6种方式总结 php两种基本的输出方及实例详解 php生成唯一uid的解决方法详解 PHP7中对十六进制字符串处理的问题详解 PHP对接抖音开发平台接口的详细教程 php7安装mysqli实例讲解 php去掉一维数组的键值的实例方法 PHP中empty()和isset()的区别介绍 PHP实现JWT的Token登录认证 php判断时间戳是否为今天实例讲解 PHP7 preg_replace出错及解决办法 五年班的学习计划怎么写 五年级的学习计划 初中新学期学习计划怎么写 关于英语的学习计划怎么写 怎么写暑假学习计划书 4年级数学学习计划怎么写
Top