垃圾回收
当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.清除:清除所有非活动的对象
热门文章
- 0元开网店无货源(0元开网店无货源拼多多可以吗)
- 1970年农历四月二十四是几号出生(1970年农历四月二十四是什么星座)
- 宠物粮食品牌取名怎么取的呢(国内十大宠物粮食品牌)
- 「2月12日」最高速度22.3M/S,2025年WinXray每天更新免费节点订阅链接
- 「1月6日」最高速度22.2M/S,2025年WinXray每天更新免费节点订阅链接
- Spring JDBC-NamedParameterJdbcTemplate模板类
- 开宠物医院的基本要求怎么写(开宠物医院需要哪些资质)
- 「2月25日」最高速度22.4M/S,2025年WinXray每天更新免费节点订阅链接
- 深圳宠物狗领养 深圳宠物狗领养网站
- 猫三联是三针还是一针打(猫三联是几针啊)