Python的垃圾回收机制用一句话来形容就是:引用计数为主,标记-清楚和分代收集两种机制为
辅的策略
1.引用计数
例子:
a = 123
b = 123
这时候 123 开辟出的内存空间就被引用了两次,计数为2,这就是引用计数
如果 b 的值被改变,这时候对于123的引用就计数为1,如果a 的值也被改变,这时候123 就会
被回收掉
优点
简单实时,一旦没有引用,内存就直接释放了。不用像其他机制等到特定时机。实时性还带来一个好处:处理回收内存的时间分摊到了平时。
缺点
维护引用计数消耗资源,会造成循环引用导致无法回收,造成内存泄露
2.标记-清楚
标记-清除机制,顾名思义,首先标记对象(垃圾检测),然后清除垃圾(垃圾回收)
3.分代收集
1.分代技术是一种典型的以空间换时间的技术,这也正是java里的关键技术。这种思想简单
点说就是:对象存在时间越长,越可能不是垃圾,应该越少去收集。
2.这样的思想,可以减少标记-清除机制所带来的额外操作。分代就是将回收对象分成数个
代,每个代就是一个链表(集合),代进行标记-清除的时间与代内对象
3.存活时间成正比例关系。
4.从上面代码可以看出python里一共有三代,每个代的threshold值表示该代最多容纳对象
的个数。默认情况下,当0代超过700,或1,2代超过10,垃圾回收机制将触发。
5.0代触发将清理所有三代,1代触发会清理1,2代,2代触发后只会清理自己。