Python特殊机制之垃圾回收机制
垃圾回收机制
【1】参考博客:
【5.0】Python基础之垃圾回收机制 - Chimengmeng - 博客园 (cnblogs.com)
【2】博客摘要
-
垃圾回收机制作为python解释器自带的一种功能,其目的在于帮助系统更好的管理内存,提高程序的运行效率
-
垃圾回收机制,用来回收不可用的变量值所占用的内存空间(在内存中,没有变量名指向的数据都是垃圾数据)
-
垃圾回收机制,引用计数为主,垃圾回收、分代回收为辅。
-
-
Python的GC模块主要运用了“引用计数”(reference counting)来跟踪和回收垃圾。
- 在引用计数的基础上,还可以通过“标记-清除”(mark and sweep)解决容器对象可能产生的循环引用的问题,并且通过“分代回收”(generation collection)以空间换取时间的方式来进一步提高垃圾回收的效率。
-
一个变量值可以有多个变量名指向,有一个变量名指向,引用计数就是1,有两个就是2
- 只要引用计数不为0,这个变量值就不是垃圾数据,当引用计数为0了,说明这个变量值就没用了,就可以清除了
一个变量名只能指向一个内存空间: 意味着一个变量名在某一时刻只能代表一个值。当你给一个变量赋新值时,它将指向新的内存空间,不再指向之前的。
一个内存空间可以被多个变量名指向: 多个变量名可以同时指向相同的内存空间。这意味着如果你改变了这个内存空间的值,所有指向它的变量都会受到影响。
- 较为复杂的底层机制,个人认为知晓操作逻辑即可
引用计数
当引用计数为0时,清除内存空间
直接引用与间接引用
标记清除
当内存空间占用到一定巨大的量时,会执行标记清除,清除所有我们通过直接引用调用不到的内存空间,哪怕它的引用次数不为0
eg : 当你出门遛狗,你把绳子放掉了,狗无法找回,当城管发现时,会将你的狗子回收清除
分代回收
高频率的扫描所有内存空间,效率较低,所以有了分代回收的概念
为变量打上“标签” ,根据标签,调整扫描频率
eg : 新任教师带班,第一天全部标记为新同学,检查作业,第二天同样全部检查,第三天将第一第二天都做作业的标记为良好学生,第四天检查新同学,并隔3天检查一次良好的同学,…… 每个同学每个阶段如果获得一定量的小红花次数,将减少扫描频率,只需要频繁扫描新同学即可,提高效率