内存管理机制和垃圾回收机制

课件+ 视频
课件

视频讲解

内存管理机制:

python 是由c语言开发,操作是基于底层c语言实现。python中创建每个对象,内部都会与c语言结构体维护一些值。
     PyObject
     双向链表(上,下)
     引用计数器
     类型
     PyVarObject
     pyObject
     容量个数
在创建对象时,每个对象至少有4个之:双向链表/引用计数器(ob_refcnt)/类型(ob_type),之后会对内存中的数据进行初始化,初始化的本质:引用计数器 = 1 和赋值,然后将对象添加到双向链表中refchain。
以后再有其他变量执行这个内存,则让引用计数器+1,如果销毁某个标量,则找到指向的内存,将其引用计数器-1.如果引用计数机为0,则进行垃圾回收。
在内部可能存在缓存机制,例如 :float/list/int, 最开始不会真的销毁,而是存放在在free_list 的链表中,以后再创将同类型的数据时,优先从链表中取出对象,然后对对象进行初始化。

垃圾回收机制:

引用计数器为主,标记清楚和分代回收为辅
-引用计数器(同上)
-引用计数器会出现循环使用
   a = [1,2]
   b = [3,4]
   a.append(b)  # b 的引用计数器 2
   b.append(a)  # a 的引用计数器 2
   del a    # 引用计数器-1
   del b    # 引用计数器-1
-标记清除:针对那些容器类的对象,在python中会将他们单独放在一个双向链表中,做定期扫描,查看是否有循环引用,如果有,则各自-1,如果-1后为0,则直接回收。
// 容器类实际上是存放在三个双向链表中的。定期扫描后,不是循环引用的对象会放到上一级双向链表中。默认是下一级扫描10次,上一级扫描1次。
- 分代回收: 共3代,从低级到高级逐级扫描。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值