python是基于什么的内存管理方式_为什么说Python采用的是基于值的内存管理模式...

内存管理架构:

1.python的内存管理机制由两部分组成,其由PYMALLOC_DEBUG控制,在debug模式下的内存管理机制和正常模式下的内存管理模式。

2.python的内存管理机制可以抽象成一种层次结构:

最底层:操作系统提供的内存管理接口,由其实现并维护

第一层:对最底层的包装,为python提供统一的原生内存管理接口和面向python中类型的内存分配器。简单地说,C语言中的malloc是需要用户自行提供申请空间的大小,而python可以由类型和数量自行判断内存空间大小

第二层:提供创建python对象的接口

第三层:为常用对象提供更抽象的内存管理策略,如整数,字符串,主要是对象缓存池机制 小块空间的内存池

1.python的内存池机制,用于小块内存的申请和释放,同样也有四层层次结构组成,分别是block,pool,arena和内存池。

第一层block:确定大小的内存块,大小有相应的划分且有上限

第二层pool:一组block的集合叫pool,最重要的pool_header和freeblock链表

第三层arena:一组pool的集合,分已使用和未使用两种状态

第四层内存池:Python中当申请内存超过某个值就启动malloc行为,当低于这个值才进行内存池申请内存,根据申请内存的大小获得对应的序号,如果已使用的pool中有可用的pool,则用其分配block,否则从已用arena中获取pool,否则申请arena,成功获取后开始初始化 循环引用的垃圾收集

1.python中的垃圾回收是基于对象的引用计数实现的,也就是说对象的生命周期是由对象的引用计数管理的。同时带来效率的降低,所以引入内存池机制,使得常用对象能更高效

2.引用计数机制致命缺点是在循环引用下容易引起内存泄漏,为了克服循环引用带来的问题,引入了其他垃圾回收机制,也就是主流垃圾收集技术中的标记(清除和分代收集技术)

3.三色标记模型,也就是标记--清除技术,步骤如下:

先找到根对象然后遍历搜索,能到达的不可删除,不能到达的可能删除

4.垃圾收集机制针对循环引用的出现,PyIntObject,PyStringObject是不会出现引用的,只有container对象才会出现引用,所以补充的垃圾回收机制是对容器类型对象创建收集链表,清除链表中循环引用的对象

5.分化收集技术是java采用的垃圾回收机制,就是将内存根据生命周期长短进行内存分化制,python将内存分成三个化,有一个化满了就将其他化连接到其后进行垃圾回收

6.需要注意的是对类对象的回收,在类中创建del方法容易引起无法回收的情况

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值