## 内存管理: 引用计数:垃圾回收机制的依据 ```python 变量的值被引用,该值的引用计数+1 变量的值被解绑,该值的引用计数-1 变量的引用计数为0时就被垃圾回收机制回收 ``` 引用计数的bug,出现循环引用,导致引用计数无法归零 ```python 两个变量引用其值,其值之间又相互引用 变量与值解除绑定,但是值之间的引用还在,引用计数永不归零。 无法被垃圾回收 ``` 标记清除:解决引用计数的bug: ```python 所有线程能访问到的栈区变量,称之为 gc roots对象 所有gc roots对象可以直接或间接访问到变量值,都会被标记为存活状态 将所有存活的变量值形成新的拷贝,到新的地址空间,变量值的地址将发生改变 将之前的地址空间区域全部清除。完成空间的释放 ``` 分代回收:对引用计数的进行的效率优化。 ```python 1刚产生的变量值,放在新生代中,高频率检查引用计数,长期存活的变量值将提高到下一级分代 分代越高,检查频率越低,且还能一直提高存活变量值的分代,提高垃圾回收效率。 ```
引用计数bug,循环引用示意图:
分代回收机制示意图:
标记清除机制示意图: