垃圾回收
-
当引用计数降为0时,可以被垃圾回收
引用计数
当有新的引用指向的时候,引用计数+1
当有无效的引用发生的时候,引用计数-1 -
垃圾回收时,Python不能进行其他任务
三种触发垃圾回收情况
- 调用gc.collect()
- GC达到阈值时
- 查看阈值
| >>> print(gc.get_threshold())
| (700, 10, 10)
|
- 程序退出时
分代(genertion)回收
- 这一策略的基本假设是:存活时间越久的对象,越不可能在后面的程序中变成垃圾。
Python将所有的对象分为0, 1, 2三代。
所有的新建对象都是0代对象。 - 当某一代对象经历过垃圾回收,依然存活,那么它就被归入下一-代对象。
垃圾回收启动时,-定会扫描所有的0代对象。 - 如果代经过一定次数垃圾回收,那么就启动对0代和1代的扫描清理。
当1代也经历了- -定次数的垃圾回收后,那么会启动对0,1 , 2 ,即对所有对象进行扫描。
标记清除
- 主要解决循环引用