垃圾回收机制

发布时间 2023-12-29 08:48:29作者: dhyuannn

垃圾回收机制(GC)

  • 垃圾回收机制(简称GC)是Python解释器自带的一种机制
  • 专门用来回收不可用的变量值所占用的内存空间(在内存中,没有变量名指向的数据都是垃圾数据)

(1)引用计数

name = 'dhy' # 'dhy' 的 引用计数就是 1
a = name # 'dhy' 的 引用计数就是2

(2)标记清除

#一旦你的内存空间装满了,溢出,那此时程序就会停止,然后进行两项工作
#标记:'dhy' :0
#清除:

(3) 分代回收

![img](C:\Users\asus\Desktop\新建文件夹 (3)\垃圾回收机制.assets\2322215-20230515145624957-1914893419.png)

#第一阶段:新生代#[] ---30s扫描一次
#第二阶段:青春代[] --- 3min扫描一次
#第三阶段:老年代[] --- 5min扫描一次
  • 分代回收的核心思想是:
    • 在历经多次扫描的情况下,都没有被回收的变量,gc机制就会认为,该变量是常用变量,gc对其扫描的频率会降低
    • 具体实现原理如下:
分代指的是根据存活时间来为变量划分不同等级(也就是不同的代) 

新定义的变量,放到新生代这个等级中,假设每隔1分钟扫描新生代一次,如果发现变量依然被引用,那么该对象的权重(权重本质就是个整数)加一,当变量的权重大于某个设定得值(假设为3),会将它移动到更高一级的青春代,

青春代的gc扫描的频率低于新生代(扫描时间间隔更长),假设5分钟扫描青春代一次,这样每次gc需要扫描的变量的总个数就变少了,节省了扫描的总时间,

接下来,青春代中的对象,也会以同样的方式被移动到老年代中。

也就是等级(代)越高,被垃圾回收机制扫描的频率越低