当前位置: 首页 > news >正文

Python对象循环引用垃圾回收算法

Python对象循环引用
我们来介绍一下 Python 是采用何种途径解决循环引用问题的。

循环引用垃圾回收算法

上图中,表示的是对象之间的引用关系,从自对象指向他对象的引用用黑色箭头表示。每个对象里都有计数器。而图中右侧部分可以很清晰的看到是循环引用的垃圾对象。

上图,将每个对象的引用计数器复制到自己的另一个存储空间中。

上图其实和图二(图片左上角)没什么区别,只不过更清晰了。因为对象本来就是由对象链表连接的。只不过是把对象链表画了出来。

上图中,将新复制的计数器都进行了减量的操作。先不要管为什么,继续往下看。

但是可以看到,由根直接引用的对象中,新复制的计数器并没有减量。

以上操作执行完毕后,再把对象分为可能到达的对象链表和不可能到达的对象链表。

之后将具备如下条件的对象连接到“可能到达对象的链表”。

经过 (4) 的减量操作后计数器值大于等于 1。
有从活动对象的引用。
再将具备如下条件的对象连接到“不可能到达对象的链表”。

经过 (4) 的减量操作后计数器值为 0
没有从活动对象的引用

现在上图显示的就是垃圾对象链表和活动对象的链表了。接下来的步骤就是释放不可能到达的对象,再把可能到达的对象连接到对象链表。

这样,Python中只要将“部分标记-清除算法”稍加变形,就解决了循环引用问题。

参考文章
http://t.zoukankan.com/Leon-The-Professional-p-10137405.html

相关文章:

  • 基于Web的盾构机盾尾变形远程监测系统
  • Docker网络代理设置
  • 《大数据之路:阿里巴巴大数据实践》-第1篇 数据技术篇 -第4章 离线数据开发
  • springboot+VUE+elementui医院设备仪器维修保养管理系统
  • css:hover用法(1) 一个是伪类选择器前加空格改变所有子元素的样式; 一个是紧挨着的兄弟元素可以使用伪类选择器。
  • Spring+SpringMVC+MyBatis框架整合的配置
  • 神经网络硕士就业前景,神经科学博士就业前景
  • 【python初级】linux系统下anaconda安装
  • c语言数据结构 二叉树下
  • janus videoroom之媒体录制
  • 语义推理的功能组件动态绑定研究
  • HTML5新特性 day_03(8.9)Canvas的路径、动画,Three.js和地理位置
  • 2022-iOS个人开发者账号申请流程
  • 建模助手 | 建筑界的难兄难弟?浅谈BIM与装配式的恩怨纠缠
  • Memcached对象缓存详解
  • 【跃迁之路】【733天】程序员高效学习方法论探索系列(实验阶段490-2019.2.23)...
  • Druid 在有赞的实践
  • java取消线程实例
  • Java深入 - 深入理解Java集合
  • Laravel Mix运行时关于es2015报错解决方案
  • python docx文档转html页面
  • React Transition Group -- Transition 组件
  • React 快速上手 - 06 容器组件、展示组件、操作组件
  • Spring-boot 启动时碰到的错误
  • Zsh 开发指南(第十四篇 文件读写)
  • 解决jsp引用其他项目时出现的 cannot be resolved to a type错误
  • 一文看透浏览器架构
  • Prometheus VS InfluxDB
  • (007)XHTML文档之标题——h1~h6
  • (C语言)编写程序将一个4×4的数组进行顺时针旋转90度后输出。
  • (floyd+补集) poj 3275
  • (二)linux使用docker容器运行mysql
  • (附源码)基于ssm的模具配件账单管理系统 毕业设计 081848
  • (附源码)计算机毕业设计SSM在线影视购票系统
  • (一)ClickHouse 中的 `MaterializedMySQL` 数据库引擎的使用方法、设置、特性和限制。
  • (译) 理解 Elixir 中的宏 Macro, 第四部分:深入化
  • *ST京蓝入股力合节能 着力绿色智慧城市服务
  • .htaccess 强制https 单独排除某个目录
  • .Net CF下精确的计时器
  • .net wcf memory gates checking failed
  • .Net 代码性能 - (1)
  • .NET 应用架构指导 V2 学习笔记(一) 软件架构的关键原则
  • .Net 中的反射(动态创建类型实例) - Part.4(转自http://www.tracefact.net/CLR-and-Framework/Reflection-Part4.aspx)...
  • .netcore 获取appsettings
  • .NET构架之我见
  • /run/containerd/containerd.sock connect: connection refused
  • [ 第一章] JavaScript 简史
  • [20181219]script使用小技巧.txt
  • [AIGC 大数据基础]hive浅谈
  • [C# WPF] 如何给控件添加边框(Border)?
  • [C#小技巧]如何捕捉上升沿和下降沿
  • [c++] 自写 MyString 类
  • [codeforces] 25E Test || hash
  • [CSS]中子元素在父元素中居中
  • [CTF]2022美团CTF WEB WP