Python 垃圾回收学习

2018-07-16  本文已影响0人  vckah

垃圾回收机制一般有两个阶段:垃圾检测和垃圾回收。
Python GC 主要使用引用计数来跟踪和垃圾回收。在引用计数的基础上,通过“标记-清除”解决容器对象可能产生的循环引用问题,通过“分代回收”以空间换时间的方法来提高垃圾回收效率。
Python 的垃圾回收经历了三个阶段:

>>> import sys
>>> a = [1, 2]
>>> sys.getrefcount(a)
2
# 为什么会是 2 呢?因为传入函数时也使用的是引用
# 但是这里还有一个很令我迷惑的问题
# 当引用计数一个 数字的时候,这个值很大
>>> sys.getrefcount(2)
931          --> 你机器上可能会不同
# 难道是因为 2 在 Python 中被缓存了??

有几种方式可以增加引用计数:
对象被创建 , 别名被创建
传递给函数, 成为容器对象的一个元素
减少引用计数方式:
对象/别名被销毁, 离开函数作用域

来自于网上:
Python 实现了一个内存池机制,将不同的内存放到操作系统而不是返回给操作系统。Python 中所有小于 256 字节的对象都使用 pymalloc 实现的分配器,大对象使用系统的 malloc。

上一篇下一篇

猜你喜欢

热点阅读