Python管理内存

Python对内存的管理要从三个方面来说:1.对象的引用计数机制、2.垃圾回收机制、 3.内存池机制

1. 对象的引用机制

Pyhton的内部使用引用计数,来保持内存中的对象,所有对象都有引用计数。

(1) 引用计数增加:
  1. 一个对象分配一个新名称
  2. 将其放入一个容器中(列表、元素或字典)
(2) 引用减少的情况
  1. 使用del语句将对象的别名显式的销毁
  2. 引用被重新赋值
    获取应用对象:
    通过sys.getrefcount( )函数获取某个引用的引用数,函数参数实际上创建了一个临时的引用。因此,getrefcount( )所得到的结果,会比期望多1。
2.垃圾回收
  1. 当一个对象的引用计数归零时,它将被垃圾回收机制处理掉
  2. python的自动垃圾回收:当分配对象的次数和取消分配对象的次数的差值高于某个阈值时,垃圾回收才会启动。
分代回收

python分代回收基本策略:存活时间越久的对象,越不可能在后面的程序中变成垃圾。(在垃圾回收的过程中,减少“长寿”对象的扫描频率)。
1. Python将所有的对象分为0, 1, 2三代。所有新建的对象都是0代对象。2. 当某一代对象经历过垃圾回收,依然存活,那么它就被归入下一代对象。
3. 每次垃圾回收启动时,一定会扫描所有0代对象。如果0代对象经过一定次数 垃圾回收,那么就会启动0代和1代的扫描清理。当1代经历一定次数的垃圾回收后,那么会启动对0,1,2,即对所有对象进行扫描。
4. 对于函数set_threshold(),返回(700, 10, 10),700为分配对象和取消分配对象的差值,当差值大于700时,启动垃圾回收;每10次0代垃圾回收,会配合1次1代的垃圾回收;每10次1代垃圾回收,会配合1次2代的垃圾回收。

3. 内存池机制

Python的内存垃圾回收机制,将不用的内存放到内存池而不是返回给操作系统。
1. Pymalloc机制。为了加速Python的执行效率,Python引入内存池机制,用于管理对小块内存的管理和释放。
2. 对于所有小于256个字节的对象都使用pymalloc实现的分配器;而大于这个长度的对象则使用系统的malloc。
3. 对于Python对象,如整数、浮点数和List,都有其独立的私有内存池,对象间不共享他们的内存池。如果你分配又释放了大量的整数,用于缓存这些整数的内存不能再分配给浮点数。
参考资料:
1. Python的内存管理: https://www.cnblogs.com/vamei/p/3232088.html
2. Python的内存管理:https://www.cnblogs.com/wangyuhangboke/p/7802253.html
2. Python常见的面试题: http://www.cnblogs.com/Allen-rg/p/7689435.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值