垃圾回收机制GC

发布时间 2023-12-05 19:36:21作者: 苏苏!!

垃圾回收机制(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扫描一次
    

    image-20231204145025054