对引用计数器、标记清除、分代回收进行了优化,引出了缓存机制。
池
为了避免重复创建和销毁一些创建对象,弄了一个维护池。
1 | v1 = 7 |
python 启动解释器的时候,会创建 -5、-4 … 257 的值。上述的 v1 和 v2 不会开辟内存,而是直接去池中获取。
如果此时 v3 = 9,实际上 v2 和 v3 的内存地址是一样的。
所以,池中的值是不会被垃圾回收的。
free_list
当一个对象的引用计数器为 0,按理说应该回收,但是,内部不会被直接回收,而是将对象添加到 free_list 链表中当缓存。
以后再去创建对象,不会重新开辟内存,而是直接使用 free_list。
每个类型的 free_list 有上限,比如
free_list- 最多
20个 元组- 这个有点特殊,不详细说明了
- 最多
80个dict - 最多
80个list - …
- 最多