• Python内存泄露问题


    什么是内存泄露?

    内存泄露是那些使用过后,应该被清理却没有被清理的内存一直占据着系统资源,通过长时间的累积导致系统崩溃。

    Python的垃圾回收机制

    1、引用计数

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

    优点:引用计数的优点是实时性,任何对象只要没有被引用就会被释放。

    缺点:1.维护引用计数需要额外的操作,花费时间和空间。2.引用计数无法解决循环引用问题,当两个对象互相引用对方时,每个对象的计数都不是0,这些对象永远不会被引用计数机制回收。

    2、标记-清除

    标记清除只关注那些可能会产生循环引用的对象,一般都是容器对象,比如列表、字典、类等等。

    过程:

    1.当触发标记清除机制时,首先将所有对象及引用计数复制出一份副本,对副本进行以下操作

    2.假设AB互相引用对方,遍历每个对象,如A,如果A中引用了B,则先将B的引用计数-1,然后去看B,如果B引用了A,则将A的引用计数也-1,这样就将对象的真实有效引用数暴露了出来。

    3.遍历完成后,如果有效引用为0则说明需要回收。

    缺点:效率低

    3.分代回收

    分代回收是用空间换时间,认为如果一个对象存活的时间越长越有可能不是垃圾,把那些在第一次垃圾回收后没有被清除的对象放入二代,减少标记清除检查的次数。一共分为三代。

  • 相关阅读:
    Flex中States的用法
    MAX脚本翻译教学
    WARN No appenders could be found for logger 解决
    解压版(绿色版)Tomcat配置
    Bootstrap入门
    什么时候用margin、padding
    简易的商品统计
    块级元素&行内元素
    不定宽元素水平居中
    JavaScript与表单交互(表单验证模型)
  • 原文地址:https://www.cnblogs.com/yinwenjie/p/12179282.html
Copyright © 2020-2023  润新知