垃圾回收gc

python的垃圾收回机制不想c和c++是开发者自己管理维护内存的,python的垃圾回收是系统自己处理的,所以作为普通的开发者,我们不需要关注垃圾回收部分的内容,如果想要深层次理解python请继续看下文。

python垃圾回收机制

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

引用计数

**原理:**当一个对象的引用被创建或者复制时,对象的引用计数加1;当一个对象的引用被销毁时,对象的引用计数减1,当对象的引用计数减少为0时,就意味着对象已经再没有被使用了,可以将其内存释放掉。

**优点:**引用计数有一个很大的优点,即实时性,任何内存,一旦没有指向它的引用,就会被立即回收,而其他的垃圾收集技术必须在某种特殊条件下才能进行无效内存的回收。

**缺点:**但是它也有弱点,引用计数机制所带来的维护引用计数的额外操作与Python运行中所进行的内存分配和释放,引用赋值的次数是成正比的,这显然比其它那些垃圾收集技术所带来的额外操作只是与待回收的内存数量有关的效率要低。同时,引用技术还存在另外一个很大的问题-循环引用,因为对象之间相互引用,每个对象的引用都不会为0,所以这些对象所占用的内存始终都不会被释放掉。

标记-清除

标记-清除只关注那些可能会产生循环引用的对象,显然,像是PyIntObject、PyStringObject这些不可变对象是不可能产生循环引用的,因为它们内部不可能持有其它对象的引用。Python中的循环引用总是发生在container对象之间,也就是能够在内部持有其它对象的对象,比如list、dict、class等等。这也使得该方法带来的开销只依赖于container对象的的数量。

原理:

寻找跟对象(root object)的集合作为垃圾检测动作的起点,跟对象也就是一些全局引用和函数栈中的引用,这些引用所指向的对象是不可被删除的;

从root object集合出发,沿着root object集合中的每一个引用,如果能够到达某个对象,则说明这个对象是可达的,那么就不会被删除,这个过程就是垃圾检测阶段;

当检测阶段结束以后,所有的对象就分成可达和不可达两部分,所有的可达对象都进行保留,其它的不可达对象所占用的内存将会被回收,这就是垃圾回收阶段。(底层采用的是链表将这些集合的对象连接在一起);

**缺点:**标记和清除的过程效率不高。

分代回收

**原理:**将系统中的所有内存块根据其存活时间划分为不同的集合,每一个集合就成为一个“代”,Python默认定义了三代对象集合,垃圾收集的频率随着“代”的存活时间的增大而减小。也就是说,活得越长的对象,就越不可能是垃圾,就应该减少对它的垃圾收集频率。那么如何来衡量这个存活时间:通常是利用几次垃圾收集动作来衡量,如果一个对象经过的垃圾收集次数越多,可以得出:该对象存活时间就越长。

下一节:多线程

python垃圾回收离职_垃圾回收gc.md相关推荐

  1. python垃圾回收离职_详细解说python垃圾回收机制

    不同于C/C++,像Python这样的语言是不需要程序员写代码来管理内存的,它的GC(Garbage Collection)机制 实现了自动内存管理.GC做的事情就是解放程序员的双手,找出内存中不用的 ...

  2. python垃圾回收离职_谈谈python垃圾回收机制

    什么是垃圾回收机制? 首先,咱先来解释名词,垃圾回收是不是就是将没用的,废弃的东西回收起来. 在坐的各位都没有女朋友对吧,那难以想象你们的房间会是一个什么样子,可能会有很多垃圾,很凌乱,自己也不收拾. ...

  3. 垃圾回收算法_垃圾回收算法有哪些

    垃圾检测通常通过建立一个根对象的集合以及建立一个从这些根对象开始能够触及的对象集合来实现.如果正在执行的程序可以访问到根对象和某个对象之间存在引用路径,这个对象就是可触及的.对于程序来说,根对象总是可 ...

  4. python训练opencb分类器_垃圾邮件分类.ipynb

    { "cells": [ { "cell_type": "markdown", "metadata": {}, &quo ...

  5. python垃圾邮件过滤_垃圾邮件过滤器Python newbi

    我需要能够处理数据集,应用我的分类算法(我选择了3个朴素的bayes版本),打印精度得分到终端,并执行5到10倍交叉验证,找出有多少电子邮件是垃圾邮件. 正如你所看到的,我已经完成了一些任务,但是没有 ...

  6. python 内存回收机制_【第1题】 Pythonn内存管理以及垃圾回收机制

    内存管理 Python解释器由c语言开发完成,py中所有的操作最终都由底层的c语言来实现并完成,所以想要了解底层内存管理需要结合python源码来进行解释. 1. 两个重要的结构体 include/o ...

  7. python内存管理和释放_《python解释器源码剖析》第17章--python的内存管理与垃圾回收...

    17.0 序 内存管理,对于python这样的动态语言是至关重要的一部分,它在很大程度上决定了python的执行效率,因为在python的运行中会创建和销毁大量的对象,这些都设计内存的管理.同理pyt ...

  8. python垃圾回收价格表_深度解析Python垃圾回收机制(超级详细)

    我们知道,目前的计算机都采用的是图灵机架构,其本质就是用一条无限长的纸带,对应今天的存储器.随后在工程学的推演中,逐渐出现了寄存器.易失性存储器(内存)以及永久性存储器(硬盘)等产品.由于不同的存储器 ...

  9. java垃圾回收机制_乐字节Java|GC垃圾回收机制、package和import语句

    本文接上一篇:乐字节Java|this关键字.static关键字.block块.本文是接着讲述JavaGC垃圾回收机制.package 和 import语句. 一.GC垃圾回收机制 GC全名:Garb ...

最新文章

  1. 多人部件解析--Towards Real World Human Parsing: Multiple-Human Parsing in the Wild
  2. Trie 树——搜索关键词提示
  3. MFC版本链表演示程序
  4. 条款13:以对象管理资源
  5. javascript基本语法(输入输出语句,变量常量,数据类型,运算符,流程控制语句,数组,函数)
  6. Web2.0时代,RSS你会用了吗?(技术实现总结)(转载)
  7. python博客项目评论_Python 爬虫入门——小项目实战(自动私信博客园某篇博客下的评论人,随机发送一条笑话,完整代码在博文最后)...
  8. laravel框架使用datatables
  9. WiMAX与Wi-Fi、DSL和3G的竞合关系
  10. 《老鹰抓小鸡》将代表中国动画电影走出国门,走向世界,yyds❤
  11. 微信动态表情保存到手机相册
  12. js 百度地图标记定位(一)
  13. pushplus推送到企业微信机器人教程
  14. Android Studio 根据屏幕大小缩放图片
  15. 用Python绘制奥运五环
  16. RISC-V MCU 智能安全驾驶监测系统
  17. 桥牌坐庄训练bm2000 level3闯关记录——A2
  18. 办公室局域网监控员工上网记录合适吗?
  19. python 常见基础命令
  20. 递归改写成非递归的两种套路 Python实现

热门文章

  1. Speaker Recognition: GMM-UBM
  2. DatagridView 跳转并显示特定的行
  3. matla可以导出回归结果表格吗_表格高级筛选,一键筛出想要的数据
  4. linux文件或目录权限修改后如何恢复(备份了权限就能恢复)
  5. leetcode 每个结点的右指针 python
  6. 从零开始搭建webpack+react开发环境
  7. 在Java代码(非JSP及Action,Servlet,Controller)中获得WebRoot的物理路径
  8. hibernate 联合主键
  9. 【Ardunio】开发入门教程【二】数据类型
  10. AUTOSAR – RTE(3)任务的并发