Python 垃圾回收机制详解

 更新时间:2021年12月29日 08:37:27   作者:MusicDancing  
这篇文章主要为大家介绍了Python 垃圾回收机制,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助

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

也即采用“引用计数“为主(实时性,一旦没有引用,内存就直接释放了),“标记-清除”与“分代收集”两种机制为辅的策略。        

1. 引用计数

为每一个对象维护一个引用计数器,当一个对象的引用被创建或者复制时,(对象的引用)计数器+1,当一个对象的引用被销毁时,计数器的值-1,当计数器的值为0时,就意味着对象已经再没有被使用了,可以将其内存释放掉。

2. 标记-清除

“标记-清除”的出现打破了循环引用,也就是它只关注那些可能会产生循环引用的对象,Python中的循环引用总是发生在容器container对象之间,也就是能够在内部持有其他对象的对象(比如:list、dict、class等)。这也使得该方法带来的开销只依赖于容器对象的数量。

原理:

将集合中对象的引用计数复制一份副本,用于找寻root object集合(该set中的对象是不能被回收的)。当成功找到root object集合,首先将现在的内存链表一分为二,一条链表维护root object集合,成为root链表;另外一条维护剩下的对象,成为unreachable链表。

一旦在标记的过程中,发现现在在unreachable链表且可能存在被root链表中直接或间接引用的对象,就将其从unreachable链表中移到root链表中;当完成标记后,unreachable链表中剩下的所有对象就是垃圾对象了,接下来的垃圾回收只需限制在unreachable链表中即可。

缺点:

该机制所带来的额外操作和需要回收的内存块成正比。

3. 分代回收

活的越长的对象,就越不可能是垃圾,就应该减少对它的垃圾收集频率。

4. 其他

4.1 JNI(Java Native Interface)

提供了若干的API,实现Java与其他语言的通信。

总结

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注脚本之家的更多内容!

相关文章

  • python 实现分组求和与分组累加求和代码

    python 实现分组求和与分组累加求和代码

    这篇文章主要介绍了python 实现分组求和与分组累加求和代码,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-05-05
  • Python实现标记数组的连通域

    Python实现标记数组的连通域

    这篇文章主要为大家详细介绍了如何通过Python实现标记数组的连通域,文中的示例代码讲解详细,对我们学习Python有一定的帮助,需要的可以参考一下
    2023-04-04
  • python绘制棉棒图的方法详解

    python绘制棉棒图的方法详解

    这篇文章主要为大家详细介绍了python绘制棉棒图的方法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-03-03
  • 关于最大池化层和平均池化层图解

    关于最大池化层和平均池化层图解

    这篇文章主要介绍了关于最大池化层和平均池化层图解,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-12-12
  • 如何利用Python合并两张图片

    如何利用Python合并两张图片

    在Python中可以使用PIL库(Python Imaging Library)来合并两张图片,这篇文章主要给大家介绍了关于如何利用Python合并两张图片的相关资料,文中给了详细的代码示例,需要的朋友可以参考下
    2024-03-03
  • Python字符串模糊匹配工具TheFuzz的用法详解

    Python字符串模糊匹配工具TheFuzz的用法详解

    在处理文本数据时,常常需要进行模糊字符串匹配来找到相似的字符串,Python的TheFuzz库提供了强大的方法用于解决这类问题,本文将深入介绍TheFuzz库,探讨其基本概念、常用方法和示例代码,需要的朋友可以参考下
    2023-12-12
  • Python中常用的内置方法

    Python中常用的内置方法

    今天小编就为大家分享一篇关于Python中常用的内置方法,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-01-01
  • python生成器generator用法实例分析

    python生成器generator用法实例分析

    这篇文章主要介绍了python生成器generator用法,实例分析了python生成器的相关使用技巧,需要的朋友可以参考下
    2015-06-06
  • Android+OpenCv4实现边缘检测及轮廓绘制出图像最大边缘

    Android+OpenCv4实现边缘检测及轮廓绘制出图像最大边缘

    最近工作需求,需要用opencv来先做一个demo,扫描照片进行边缘检测和最大边缘,就整理出来介绍一下,感兴趣的小伙伴们可以参考一下
    2021-05-05
  • 在 Python 中接管键盘中断信号的实现方法

    在 Python 中接管键盘中断信号的实现方法

    要使用信号,我们需用导入 Python 的signal库。然后自定义一个信号回调函数,当 Python 收到某个信号时,调用这个函数。 ,下面通过实例代码给大家介绍在 Python 中接管键盘中断信号,需要的朋友可以参考下
    2020-02-02

最新评论