python学习之垃圾回收二
GC垃圾回收:
python采用的引用计数机制为主,标记-清除和分代收集两种机制为辅.
python里每一东西都是对象,它们的核心就是一个结构体:PyObject.
typedef struct_object {
int ob_refcnt; #引用计数,当一个对象有一个新的引用的时,ob_refcnt增加一,
#当引用它的对象被删除的时候,他的ob_refcnt就会减少.
struct_typeobject *ob_type;
} PyObject;
引用计数机制的优点:
-简单
-实时性:一旦没有引用,内存就直接释放了;处理回收内存的时间分摊到了平时.
引用计数机制的缺点:
-维护引用计数消耗资源
-循环引用:
例子:
list1 = []
list2 = []
list1.append(list2)
list2.append(list1)
这里需要标记清除和分代收集...
GC系统所承担的工作远比"垃圾回收"多得多.
-为新生成的对象的内存
-识别那些垃圾对象
-从垃圾对象那回收内存
python的对象分配:
可用列表(用来回收一些特定对象)
当创建对象时python立即向操作系统请求内存;当我们创建第二对象的时候,再次向os请求内存.
当我们创建对象的时候,Python会花些时间为我们找到并且分配内存.
Python设置'JKL'的引⽤数为1。然⽽,请注意由于我们改变了n1
指向了JKL,不再指向'abc',Python就把'abc'的引⽤数置为0了。 此刻,
Python垃圾回收器⽴刻挺身⽽出!每当对象的引⽤数减为0,Python⽴即将
其释放,把内存还给操作系统:
引⽤数已经被Python减少了,垃圾回收器会⽴即回收
'abc'实例。同时'GHI'的引⽤数已经变为了2 ,因为n1和n2都指向它。

浙公网安备 33010602011771号