Python笔记,内存管理(2)----垃圾回收

垃圾回收
当python的某个对象的引用计数降为0时,可以,被垃圾回收

gc机制

    1.GC作为现代编程语言的自动内存管理机制,专注干两件事
      (1),找到内存中无用的垃圾资源
      (2),清除这些理解并把内存让出来给其他对象使用
            GC彻底把程序员熊资源管理的重担中解放出来,让他们有更多的时间放在业务逻辑上,
    单着并不意味着码农就可以不去了解GC,毕竟多了解GC知识还是有利于我们写出更健壮的代码    

效率问题

         1.垃圾回收时,python不能进行其他的任务,
         频繁的立即回收将大大简单地python的工作效率

         2.当python运行时,会记录其中分配对象(object allocation)
         和取消分配对象(abject deallocation)的次数,
         当两者的差值高于某个阈值的时候,垃圾回收才会启动
 >>> import gc
				>>> print(gc.get_threshold())
				(700, 10, 10)
				>>> 
 #700 代表新创建的对象减去从新创建的对象中回收的数量的差值大于700
 #就进行一次0代回收当0代回收进行10次的时候就进行一代回收
 #(并且一代回收的时候也进行0代回收),同理,当一代回收进行10次的时候就进行2代回收
 #并且二代回收的时候也进行0代回收和一代回收)

启动垃圾回收三种情况
1.调用gc.collect()的时候
2.GC达到阈值的时候
3.程序退出的时候

            >>> x = ["x"]
			>>> y = ["y"]
			>>> x.append(y)
			>>> y.append(x)
			>>> import gc
			>>> print(gc.get_threshold())
			(700, 10, 10)
			>>> gc.collect()
			0
			>>> del x
			>>> del y
			>>> gc.collect()
			2
			>>> a="x1 xx"
			>>> b="x1 xx"
			>>> a = 1
			>>> b = 2
			>>> gc.collect()
			0
			>>> 


垃圾回收的两种方法:

1.分代回收(generation)回收:
这一策略的基本假设是:存活时间越久的对象,
越不可能在后面的程序中变成垃圾

         1.python将所有的对象分为0.1.2三代
         2.所有的新建对象均是0代对象
         3.当某一代对象经过来及回收,依然存活,那么它就被归入下一代对象
         4.;垃圾回收启动时,一定会扫描所有的0代对象
         5.如果0代经过一定次数的垃圾回收,那么就启动对0代和1代的扫描清理
         6.当1代也经历了一定次数的垃圾回收后,那么会启动对0.1.2,
            即对所有的对象进行扫描

2.标记清除:
标记——清除机制,顾名思义,首先标记对象(垃圾检测),
然后清除垃圾(垃圾回收),主要用于解决循环引用。

        1.标记:活动(有被引用),非活动(可被删除)
        2.清除:清除所有非活动的对象
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值