Python 垃圾回收机制

Python垃圾回收主要是以引用计数为主,分代收集和标记-清除为辅。

在Python中,如果一个对象引用计数为0. Python虚拟机就会回收这个对象的内存。

引用计数

引用计数机制优点:

1.简单

2.实用性:一旦没有引用,内存就直接释放掉了。

缺点:

1.维护引用计数消耗资源

2.循环引用(导致无法回收内存即内存泄漏)

导致引用计数+1的情况

1.对象被创建,例如a = 23

2.对象被引用, 例如b= a

3.对象被作为参数,传入到一个函数中,例如fun(a)

4.对象被作为一个元素,存储在容器中,例如list1 = []

导致引用计数-1的情况

1.对象的别名被显式销毁,例如del a

2.对象的别名被赋予新的对象,例如a =24

3.一个对象离开了他的作用域(局部变量)

4.对象所在的容器被销毁,或者从容器中删除对象。

触发垃圾回收情况:

1.调用了gc.collect()

2.当gc模块的计数器到达阈值时。

3.程序退出的时候。

标记-清除

清楚-标记算法是一种基于追踪回收技术实现的垃圾回收算法。它分为两个阶段:

1.标记阶段。GC会把所有的“活动对象”打上标记

2.把未标记的对象进行回收。

标记清除算法作为Python的辅助垃圾收集技术主要处理的是一些容器对象。

分代回收:(是建立在标记清除技术基础之上)

分代回收是一种以空间换时间的擦做方式。Python将内存根据对象的存活时间分为不同的集合,每一个集合称为一个带。Python将内存分为三代。即年轻(第0代)代,中年代(第一代)老年代(第二代)。他们对应的是3个链表,他们的垃圾收集频率与对象存活时间的增大而减小。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值