Python垃圾回收机制

整数:小整数:python对小整数的定义是[-5,257)这些整数对象是提前建立好的,不会被垃圾回收。在一个python的程序中,所有位于这个范围内的整数使用的都是同一个对象。单个字母同样也是如此。 大整数:每一个大整数的创建均在内存中分配一个内存空间,所以大整数的内存空间是需要被回收的

引用计数为主,标记清除和分代回收为辅:

引用计数:python里每一个东西都是对象,它们的核心就是一个结构体:PyObject。PyObject是每个对象必有的内容,其中ob_refcnt就是做为引用计数。当一个对象有新的引用时,它的ob_refcnt就会增加,当引用它的对象被删除,它的ob_refcnt就会减少,当引用计数为0时,该对象生命就结束了

引用计数机制的优点:(1)简单(2)实时性:一旦没有引用,内存就直接释放了。不用像其他机制等到特定时机。实时性还带来一个好处:处理回收内存的时间分摊到了平时

缺点:(1)维护引用计数消耗资源(2)循环引用

标记清除:该算法是一种基于追踪回收技术实现的垃圾回收算法。它分为两个阶段:第一个阶段是标记阶段,GC会把所有的活动对象打上标记,第二阶段是把那些没有标记的对象(非活动对象)进行回收。从GCROOT出发,标记所有的可达对象,不可达的就清除掉

标记清除算法作为python的辅助垃圾收集技术主要处理的是一些容器对象,比如list、dict、tuple、instance等,由于对于字符串、数值对象是不可能造成循环引用问题

分代回收:是一种以空间换时间的操作方式,python将内存根据对象的存活时间划分为不同的集合,每个集合称为一个代,python将内存分为了3‘代’,分别为年轻代(第0代)、中年代(第1代)、老年代(第2代),他们对应的是3个链表,它们的垃圾收集频率与对象的存活时间的增大而减小。每个分代集合中索引值越大的代表存活时间越长,越不容易被回收。分代回收是建立在标记清除技术基本之上。分代回收同样做为python的辅助垃圾收集技术处理那些容器对象

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值