python是如何管理内存的_python是如何管理内存的?

python 是一门动态类型的面向对象的编程语言,它把所有的对象和数据结构都保存在私有堆空间中。python通过内置的垃圾回收机制来管理内存。

1. 什么样的数据会被回收。

看看简单的赋值语句:

a = 1

b = 1

上面的赋值语句中,1为对象,a和b为引用,使用python内置的id()函数可以查看对象所存在的内存位置。可以发现id(a)和id(b)指向的是同一个位置。

也可以通过is来判断a和b所指向的是都为同一个对象。

python的sys可中也提供了getrefcount()来查看一个对象的引用计数。

当对象的引用计数降为0,没有任何地方用到他,他就成为了垃圾回收的目标。

2. 垃圾回收的启动条件

垃圾回收是比较费资源的,而且在垃圾回收的过程中,程序无法运行,所以垃圾回收肯定不能频繁启动,那在什么样的条件下,垃圾回收会启动呢?

当内存中,引用计数为0的对象和引用计数不为0的对象之间的差值达到一定数值的时候,python会启动垃圾回收。

通过gc.get_threshold()来查看垃圾回收的阈值,默认情况,该函数的返回值为(700,10,10),第一个数字700,表示了启动垃圾回收的阈值。后面的两个10,是垃圾回收中的分代回收的参数。下面说说什么是分代回收。

3. 什么是分代回收

在说分代回收之前,讲讲对象的寿命。一个对象存活的越久,说明它在程序中使用次数多,这种对象是比较不容易成为被回收的垃圾的,所以垃圾回收机制对这种数据比较宽容。

python把所有的对象分为了0,1,2三代,每代对象经历过一次垃圾回收之后还存在,将会归入到下一代中。

gc.get_threshold()获取到的(700,10,10)在这里表示,0代对象每次垃圾回收都会扫描,每10次0代对象的扫描配合一次1代对象的扫描,每10次1代对象的扫描配合一次2代对象的扫描。

可以通过gc.set_threshold()来改变这三个值。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值