您现在的位置是:首页 > 文章详情

Python 内存管理之垃圾回收

日期:2020-05-26点击:372

云栖号资讯:【点击查看更多行业资讯
在这里您可以找到不同行业的第一手的上云资讯,还在等什么,快来!


如果您已经编码过一段时间,那么您可能听说过垃圾回收。在本文中,我们将更深入地研究它的功能和原理。

What 和 Why

在现实世界中,我们会清理掉一些东西 —— 例如旧笔记,不再需要的盒子 —— 将它们丢弃在垃圾桶或者回收箱中。因为存储的空间有限,所以我们要为其它重要的物品腾出存储空间。

同样地,在计算机中,空间 —— 也称为内存是重要且有限的资源。因此,垃圾回收器会收集不再需要的数据对象并将其丢弃。

垃圾回收可以是自动的也可以是手动的,它取决于不同的编程语言。在大多数高级语言(例如 Python 和 Java)中,它是自动的。因此,这些语言称为垃圾回收语言。其它语言(例如 C)不支持自动垃圾回收,程序员负责内存管理。

下面我们来看看垃圾回收的原理。

How

垃圾回收原理中有一些不同的技术,但大多数垃圾回收语言(包括 Python)都使用引用计数。在引用计数中,我们记录对象的引用数,并在计数为 0 时丢弃对象。

对象的引用计数随着指向该对象的别名数量的变化而变化。给对象分配新名称或将其放置在列表或字典等容器中时,引用计数会增加。当使用 del 命令删除对象,引用超出范围或重新分配对象时,计数会减少。例如:

1

当引用计数下降到 0 时,对象会被立即回收。但是这样做有一个代价:我们需要为每个对象存储一个附加的整数值,以指示其引用计数(空间与时间的权衡)。

但是,引用计数系统中存在 循环引用 的问题。如果两个对象 A 和 B 互相引用,则它们的引用计数将会始终大于或等于 1。这种情况在列表、类和函数中很常见。例如,当对象引用自身时:

2

或者当对象相互引用时:

3

垃圾回收器会定期找出循环引用并将其删除。这个过程会耗费昂贵的资源,所以它是定期执行的并且是可计划的。Python 中的垃圾回收器接口提供了一些方法,您可以用它们来探索执行垃圾回收的计划和阈值。

【云栖号在线课堂】每天都有产品技术专家分享!
课程地址:https://yqh.aliyun.com/live

立即加入社群,与专家面对面,及时了解课程最新动态!
【云栖号在线课堂 社群】https://c.tb.cn/F3.Z8gvnK

原文发布时间:2020-05-27
本文作者:CodingSuccess
本文来自:“掘金”,了解相关信息可以关注“掘金”

原文链接:https://yq.aliyun.com/articles/762665
关注公众号

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。

持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。

文章评论

共有0条评论来说两句吧...

文章二维码

扫描即可查看该文章

点击排行

推荐阅读

最新文章