zoukankan      html  css  js  c++  java
  • 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.分代回收

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

  • 相关阅读:
    MySQL
    LeetCode
    数据结构
    我的编程幻想曲,更新中
    快速排序
    C与C++的区别
    必须要使用列表初始化的几种情况
    析构中delete this
    指向自身类型的成员指针的初始化,this不属于类对象的一部分
    构造函数
  • 原文地址:https://www.cnblogs.com/yinwenjie/p/12179282.html
Copyright © 2011-2022 走看看