Python Day09

## 内存管理:

 引用计数:垃圾回收机制的依据

```python
变量的值被引用,该值的引用计数+1
变量的值被解绑,该值的引用计数-1
变量的引用计数为0时就被垃圾回收机制回收
```

引用计数的bug,出现循环引用,导致引用计数无法归零

```python
两个变量引用其值,其值之间又相互引用
变量与值解除绑定,但是值之间的引用还在,引用计数永不归零。
无法被垃圾回收
```

标记清除:解决引用计数的bug:

```python
所有线程能访问到的栈区变量,称之为 gc roots对象
所有gc roots对象可以直接或间接访问到变量值,都会被标记为存活状态
将所有存活的变量值形成新的拷贝,到新的地址空间,变量值的地址将发生改变
将之前的地址空间区域全部清除。完成空间的释放
```

分代回收:对引用计数的进行的效率优化。

```python
1刚产生的变量值,放在新生代中,高频率检查引用计数,长期存活的变量值将提高到下一级分代
分代越高,检查频率越低,且还能一直提高存活变量值的分代,提高垃圾回收效率。
```

引用计数bug,循环引用示意图:

分代回收机制示意图:

标记清除机制示意图:

原文地址:https://www.cnblogs.com/huhongpeng/p/10760448.html