Python 垃圾回收机制原理详解

Python 垃圾回收机制原理详解目录 1 引用计数 2 标记 清除 3 分代回收 4 其他 4 1JNI JavaNativeIn 总结 Python 的 GC 模块主要运用了引用计数来跟踪和回收垃圾 通过 标记 清除 解决容器对象可能产生的循环引用问题 通过分代回收以空间换时间进一步提高垃圾回收的效率 也即采用 引用计数 为主 实时性 一旦没有引用 内存就直接释放了 标记 清除 与 分代收集 两种机制为辅的策略 1 引用计数为每一个对象维护一个引用计数器

目录

  • 1. 引用计数
  • 2. 标记-清除
  • 3. 分代回收
  • 4. 其他
    • 4.1 JNI(Java Native Interface)
  • 总结

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与其他语言的通信。

总结

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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/233324.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Maven 入门教程

    Maven 入门教程   maven是一个项目管理工具,不仅可以把源代码构建为可以发布的项目(包括编译、打包、测试、分发),还可以生成报告、生成web站点。本文介绍maven的主要使用过程,作为入门1、maven的安装   windows下载地址http://maven.apache.org/download.cgi zip解压缩包,无需安装直接解压即可。   配置环境变量:MAVE…

    2025年10月6日
    7
  • Feign的工作原理[通俗易懂]

    Feign的工作原理[通俗易懂]Feign的工作原理Feign是一个伪JavaHttp客户端,Feign不做任何的请求处理。Feign通过处理注解生成Request模板,从而简化了HttpAPI的开发。开发人员可以使用注解的方式定制RequestAPI模板。在发送HttpRequest请求之前,Feign通过处理注解的方式替换掉Request模板中的参数,生成真正的Request,并交给JavaHttp客户端去处理。利用这种方式,开发者只需要关注Feign注解模板的开发,而不用关注Http请求本身,简化了Http请求

    2022年10月4日
    4
  • Windowsapp_windowsserver是什么

    Windowsapp_windowsserver是什么WindowsServerAppFabric扩展了WindowsServer以为Web应用程序和中间层服务提供增强的托管、管理和缓存功能。AppFabric托管功能向Internet信息服务(IIS)、WindowsProcessActivationService(WAS)和.NETFramework4添加了服务管理扩展。其中包括托管服务和托管管理工具,

    2022年10月17日
    5
  • 一码中_amp是什么意思

    一码中_amp是什么意思每日一码将每天看到的优秀的代码或者特别的实现,记录下来a&b赋值问题_2019218_Q&Aa.x//这时a.x的值是多少?b.x//这时b.x的值是多少

    2022年8月2日
    6
  • SpiderData 2019年1月31日 DApp数据排行榜[通俗易懂]

    SpiderData 2019年1月31日 DApp数据排行榜[通俗易懂]SpiderData 2019年1月31日 DApp数据排行榜

    2022年4月21日
    54
  • 推荐引擎初探

    推荐引擎初探

    2021年11月21日
    53

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号