zoukankan      html  css  js  c++  java
  • Python垃圾回收机制

    Python垃圾回收机制

      指是Python自带的一种机制,用于回收不可以变量值所占的内存空间。

    1.引用计数

      引用计数表示变量值被引用的次数

      栈区:用于存储变量值的内存地址

      堆区:用于存储值

        1.当一个值被引用时则引用计数加1

        

        2.当被销毁时这引用计数减1

        

        3.当引用计数为0时则变量名回被垃圾回收机制回收空间

      引用分为两种:直接引用和间接引用

    # 直接引用
    x = 10
    y = x
    z = x
    print(id(x))  # 1802076560
    print(id(y))  # 1802076560
    print(id(z))  # 1802076560
    
    # 间接引用
    l = [1,2,3]
    print(l[0])  # 1

    2.标记-清除

      标记-清除用于解决循环引用问题

      循环引用很危险,当l1,l2变量被销毁时,则这两个值的引用计数不为1,但是还是存在,但是这个两个又没有办法取到,因为这个两个值还存在互相引用,循环引用很容易引起内容泄露,所有很危险!!

    l1 = [1, 2, 3]
    l2 = ["a", "b", "c"]
    res1 = l1.append(l2) #res1与res2互相引用
    res2 = l2.append(l1)
    print(id(res1))  # 1801616688
    print(id(res2))  # 1801616688
    
    print(id(l1))  # 40625800
    print(id(l2))  # 40627080

    3.分代回收

      分代回收用于解决效率问题

      分代回收 将系统中的所有内存块根据其存活时间划分为不同的集合, 每一个集合就成为一个“代”,垃圾收集的频率随着“代”的存活时间的增大而减小。 也就是说,活得越长的对象,就越不可能是垃圾,就应该减少对它的垃圾收集频率。 那么如何来衡量这个存活时间:通常是利用几次垃圾收集动作来衡量, 如果一个对象经过的垃圾收集次数越多,可以得出:该对象存活时间就越长。

     思维导图(点击链接

  • 相关阅读:
    httpclient在获取response的entity时报异常
    SpringCloud项目,接口调用返回http 500
    使用maven插件生成grpc所需要的Java代码
    win10 无法修改默认程序 默认打开方式的解决方法
    mock.js中新增测试接口无效,返回404
    echarts的pie图中,各区块颜色的调整
    HashMap源码注释翻译
    netty学习记录2
    netty学习记录1
    Java-JNA使用心得2
  • 原文地址:https://www.cnblogs.com/zhww/p/12977042.html
Copyright © 2011-2022 走看看