python中内存回收机制

python中内存回收机制

python中垃圾回收GC

  • Garbage collection(垃圾回收)
    – 为新生成得对象分配内存
    – 识别那些垃圾对象
    – 从垃圾对象那回收内存

  • python采用得是 "引用计数机制 "为主, 标记-清楚和分代收集两种机制为辅的策略(本文主要解释引用计数)

引用计数机制的优缺点:

优点:
    -- 简单
    -- 实时性: 一旦没有引用,内存就直接释放了。不用像其他机制等到待定时机。 实时性还带来一个好处: 处理回收内存的时间分摊到了平时
缺点:
    -- 维护引用计数消耗资源
    -- 循环引用

引用计数

  • 导致引用计数 +1 的情况
    – 对象被创建, 例如 a = 1
    – 对象被引用, 例如 b = a
    – 对象被作为参数,传入到一个函数中,例如 func(a)
    – 对象作为一个元素,存储在容器中, 例如 list = [a, b, c]
    以上都会导致引用计数 +1

  • 导致引用计数 -1 的情况
    – 对象的别名被显式销毁, 例如 del a
    – 对象的别名被赋予新的对象,例如 a=2
    – 一个对象离开它的作用域,例如f函数执行完毕时, func函数中的局部变量(全局变量不会)
    – 对象所在的容器被销毁, 或从容器中删除对象

  • python里每一个东西都是对象,它们的核心是一个结构体:PyObject

	typedef struct_object {
		int ob_refcnt;
		struct_typrobject *ob_type;
	}PyObjext;
	#define Py_INCREF(op) - > ob_refcent ++  // 增加计数
	#define Py_DECREF(op) \                 // 减少计数
		if  (--(op) -> ob_refcent  != 0) \
			; \
		else \
				_Py_dealloc((PyObject *)(op))
				

注释:以上为垃圾回收机制模块代码,由C语言编写

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值