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都指向它。





posted @ 2019-09-09 20:04  搬砖的孟达  阅读(7)  评论(0)    收藏  举报  来源