垃圾回收机制
我们定义变量会申请内存空间来存放变量的值,而内存的容量是有限的,当一个变量值没有用了(称为垃圾),就应该将其占用的内存给回收掉。变量名是访问到变量的唯一方式,所以当一个变量值没有任何关联的变量名时,我们就无法访问到该变量了,该变量就是一个垃圾,会被python解释器垃圾回收机制自动回收。
一、什么是垃圾回收机制
垃圾回收机制是python解释器自带的一种机制,专门用来回收不可用的变量值所占用的内存空间
二、为什么要有垃圾回收机制
程序运行过程中会申请大量的内存空间,而对于一些无用的内存空间,如果不及时清理的话,会导致内存使用完(内存溢出),导致程序崩溃,因此,内存管理是一件重要且繁杂的事情,而python解释器自带的垃圾回收机制把程序员从繁杂的内存管理中解放出来。
三、垃圾回收机制原理分析
python的GC模块主要采用了‘引用计数’来跟踪和回收垃圾。在引用计数的基础上,还可以通过‘标记-清除’来解决容器对象可能产生的循环引用的问题,并且通过‘分代回收’来以空间换取时间的方式进一步提高垃圾回收的效率。
1,引用计数
引用计数就是:变量值被变量名关联的次数
如:
引用计数增加
name = 'Alex'(此时,变量值'Alex'的引用次数为1)
name1 = name(此时,把name的内存地址给了name1,此时,变量值'Alex'的引用计数为2)
引用计数减少
name = 'Alice'(此时,name和'Alex'解除关系,与'Alice'建立关系,变量值'Alex'的引用计数为1)
del name1(del是解除变量名name1与变量值'Alex'之间的关系,变量值'Alex'的引用计数为0),变量值'Alex'的引用计数为0,其占用的内存空间就会被回收
当数据值身上的引用计数为0的时候,就会被垃圾回收机制当做垃圾回收掉
当数据值身上的引用计数不为0的时候,永远不会被垃圾回收机制回收
2. 标记清除
标记清除主要针对循环引用问题。


当内存占用达到临界值的时候,程序会自动停止,然后扫描程序中所有的数据,并给只产生循环引用的数据打上标记,之后一次性清除。
3. 分代回收
基于引用计数的回收机制,每次回收内存,需要把所有的对象的引用计数都遍历一遍,这是非常耗费时间的,也会损耗各项资源,于是引入分代回收提高回收效率,采用‘空间换取时间的策略’。

新生代、青春代、老年代(越往下检测频率越低,根据该变量的使用频率来看是否进行回收)

浙公网安备 33010602011771号