垃圾回收机制(GC)
(一)什么是垃圾回收机制
- 垃圾回收机制简称GC,是Python解释器自带的一种机制。
- 专门用来回收不可用的变量值所占用的内存空间(在内存中,没有变量名指向的数据都是垃圾数据)
(二)垃圾回收机制原理
- 引用计数为主,垃圾回收、分代回收为辅。
- Python的GC模块主要运用了“引用计数”(reference counting)来跟踪和回收垃圾。
- 在引用计数的基础上,还可以通过“标记-清除”(mark and sweep)解决容器对象可能产生的循环引用的问题,并且通过“分代回收”(generation collection)以空间换取时间的方式来进一步提高垃圾回收的效率。
重点:
-
十二个字
- 引用计数
- 引用计数就是:变量值被变量名引用的次数。
- 一个变量值可以有多个变量名指向,有一个变量名指向计数就是1,有两个就是2。
- 引用计数不为0,这个变量值就不是垃圾数据,引用计数为时,说明这个变量值没用了,可以清除了。
name = 'syh'#'syh'的引用计数就是1 s='syh' #'syh'的引用计数就是2
- 标记清除
- 在Python的内存管理中,标记-清除算法是一种常用的垃圾回收(Garbage Collection)方法之一。它的主要目标是解决循环引用导致的内存泄漏问题。
- 通俗理解为当内存空间即将沾满的时候,python会暂停程序的运行,从头到位扫描一遍,并且把扫描出来的垃圾数据做标记,然后,一次性做清除处理。
- 标记/清除算法的做法是当应用程序可用的内存空间被耗尽的时,就会停止整个程序,然后进行两项工作。
#在我们的内存空间被占满了、溢出的时候,此时的程序就会停止,然后进行两项操作。 #标记 :'syh' :0 #清除 : 遍历整个堆内存,将没有被标记的对象认定为非存活对象,进行清除操作。这些对象所占用的内存空间将被释放。
- 分代回收
- 分代回收是一种垃圾回收的策略,其核心思想是根据对象的存活时间将其划分为不同的代。
#'syh' #第一阶段:新生代[] -----30s扫描一次 #第二阶段:青春代[] -----3min扫描一次 #第三阶段:老年代[] -----5min扫描一次
- 引用计数