1、引用计数机制:

python里每一个东西都是对象,它们的核心就是一个结构体:PyObject

typedef struct_object {

int ob_refcnt; #引用计数

struct_typeobject *ob_type;

} PyObject;

PyObject是每个对象必有的内容,其中ob_refcnt就是做为引用计数。当一个对象有新的引用时,它的ob_refcnt就会增加,当引用它的对象被删除,它的ob_refcnt就会减少

#define Py_INCREF(op) ((op)->ob_refcnt++) //增加计数#define Py_DECREF(op) \ //减少计数

if (--(op)->ob_refcnt !=0) \

; \else\__Py_Dealloc((PyObject *)(op))

importsysclassA(object):def __init__(self):"""初始化对象"""

print ('object born id:%s'%str(hex(id(self))))deff1():"""循环引用变量与删除变量"""

whileTrue:

c1=A()delc1deffunc(c):"""getrefcount() 返回对象的引用计数"""

print ('object refcount is:',sys.getrefcount(c))if __name__=='__main__':#生成对象

a=A()

func(a)#增强引用

b=a

func(a)#销毁引用

delb

func(a)

结果:

object born id:0x1043059b0object refcountis: 4object refcountis: 5object refcountis: 4

gc方式1:引用计数

若此对象无其他对象引用,则立马回收掉

优点:简单、实时(将处理垃圾时间分摊到运行代码时,而不是等到一次回收)

缺点:

1.保存对象引用数会占用一点点内存空间

2.每次执行语句都可能更新引用数,不再使用大的数据结构时,会引起大量对象被回收

3.不能处理循环引用的情况

gc方式2:标记-清除(Mark—Sweep)

此方式主要用来处理循环引用的情况,只有容器对象(list、dict、tuple,instance)才会出现循环引用的情况

处理过程1.将所有容器对象放到一个双向链表中(链表为了方便插入删除),这些对象为0代

2.循环遍历链表,如果被本链表内的对象引入,自身的被引用数-1,如果被引用数为0,则触发引用计数回收条件,被回收掉

3.未被回收的对象,升级为1代

『标记清除(Mark—Sweep)』算法是一种基于追踪回收(tracing GC)技术实现的垃圾回收算法。它分为两个阶段:第一阶段是标记阶段,GC会把所有的『活动对象』打上标记,第二阶段是把那些没有标记的对象『非活动对象』进行回收。那么GC又是如何判断哪些是活动对象哪些是非活动对象的呢?

对象之间通过引用(指针)连在一起,构成一个有向图,对象构成这个有向图的节点,而引用关系构成这个有向图的边。从根对象(root object)出发,沿着有向边遍历对象,可达的(reachable)对象标记为活动对象,不可达的对象就是要被清除的非活动对象。根对象就是全局变量、调用栈、寄存器。

何时触发

1.被引用为0时,立即回收当前对象

2.达到了垃圾回收的阈值,触发标记-清除

3.手动调用gc.collect()

4.Python虚拟机退出的时候

python中的垃圾回收机制_python里面的垃圾回收机制相关推荐

  1. [转载] python中for语句用法_详解Python中for循环的使用_python

    参考链接: 在Python中将else条件语句与for循环一起使用 这篇文章主要介绍了Python中for循环的使用,来自于IBM官方网站技术文档,需要的朋友可以参考下 for 循环 本系列前面 &q ...

  2. python中for语句用法_详解Python中for循环的使用_python

    这篇文章主要介绍了Python中for循环的使用,来自于IBM官方网站技术文档,需要的朋友可以参考下 for 循环 本系列前面 "探索 Python,第 5 部分:用 Python 编程&q ...

  3. python中异或怎么算_python 异或运算的前提_异或运算公式

    Python基础(10)–数字-Python-第七城市 609x288 - 73KB - JPEG Python基础(10)--数字_资讯_突袭网 609x288 - 33KB - JPEG pyth ...

  4. python中的引用怎么理解_python 引用和对象理解

    今天浏览博客的时候看到这么一句话: python中变量名和对象是分离的:最开始的时候是看到这句话的时候没有反应过来.决定具体搞清楚一下python中变量与对象之间的细节.(其实我感觉应该说 引用和对象 ...

  5. python中序列是什么意思_python序列是指什么

    所谓序列,指的是一块可存放多个值的连续内存空间,这些值按一定顺序排列,可通过每个值所在位置的编号(称为索引)访问它们. 在 Python 中,序列类型包括字符串.列表.元组.集合和字典,这些序列支持以 ...

  6. python中的断点是什么_python断点定义

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 功能对比下表列出了 json python sdk 和 xml python s ...

  7. python中画糖葫芦的代码_Python中的内存管理

    内存管理 包括: ①变量无须事先声明,变量无须指定类型 ②引用计数 ③垃圾回收 ④内存池机制 ①变量定义 不用事先声明变量类型而直接对变量进行赋值.对Python语言来讲,对象的类型和内存都是在运行时 ...

  8. python中的不可变对象_python中的可变与不可变对象

    什么是可变/不可变对象 不可变对象,该对象所指向的内存中的值不能被改变.当改变某个变量时候,由于其所指的值不能被改变,相当于把原来的值复制一份后再改变,这会开辟一个新的地址,变量再指向这个新的地址. ...

  9. __init__在python中的用法知乎_python使用selenium爬虫知乎的方法示例

    说起爬虫一般想到的情况是,使用 python 中都通过 requests 库获取网页内容,然后通过 beautifulSoup 进行筛选文档中的标签和内容.但是这样有个问题就是,容易被反扒机制所拦住. ...

  10. python中装饰器的作用_Python装饰器详解,详细介绍它的应用场景

    装饰器的应用场景附加功能 数据的清理或添加:函数参数类型验证 @require_ints 类似请求前拦截数据格式转换 将函数返回字典改为 JSON/YAML 类似响应后篡改为函数提供额外的数据 moc ...

最新文章

  1. java如何判断打印是否成功_如何验证Zebra打印机是否使用ZPL和C#成功打印(或能够检测到错误)?...
  2. 计算机专业技术人员工作总结,计算机教师专业技术年终工作总结及计划范文模板.docx...
  3. 肝一波 ~ 手写一个简易版的Mybatis,带你深入领略它的魅力!
  4. TCP性能和发送接收窗口、Buffer的关系
  5. Pandas-Series知识点总结
  6. oracle里查询表的语句,Oracle查询用户所有表的语句
  7. 系统状态检测 及进程控制
  8. MediaPlayer的错误修复
  9. matlab 工具函数(一) —— 添加指定 SNR 的噪声
  10. 使用HDR Efex Pro 2 mac版如何合并图像?
  11. python的smtplib
  12. 什么是“元认知”?用具体的例子易懂地解说教育、商务中大受关注的能力!
  13. 《数据库系统原理》课程设计:超市订单管理系统
  14. 操作系统启动后 计算机处于 模式,电脑开机出现选择操作系统。怎么办?
  15. 第1章第14节:导出:如何将演示文稿保存为视频格式的文件 [PowerPoint精美幻灯片实战教程]
  16. Oracle sysman.mgmt_jobs导致数据库自动重启
  17. 【易择微信系列7】玩转语音
  18. 开源中Web开发的各种资源
  19. 程序员的工资是不是被高估了?
  20. WRF官网案例运行01

热门文章

  1. SAP Spartacus FeaturesConfig
  2. Angular 页面元素的DOM级别的删除过程
  3. Angular开发遇到的一个错误消息 - Expected linebreak to be LF(和本地文件的换行设置有关)
  4. 如何处理使用ngrx时遇到的错误消息: NullInjectorError R3InjectorError(AppModule)[StoreFeatureModule]
  5. SAP ABAP, Fiori, Android和Hybris里的异步操作
  6. SAP SRM ABAP Webdynpro和CFCA usb key集成的一个原型开发
  7. SAP Hybris Commerce启用customer coupon的前提条件
  8. Appointment get entity debug
  9. UI5 table display visible row count logic calculation calculate
  10. How is XSRF token retrieved from backend