python垃圾回收机制(Garbage collection)

  由于面试中遇到了垃圾回收的问题,转载学习和总结这个问题。

  在C/C++中采用用户自己管理维护内存的方式。自己管理内存极其自由,可以任意申请内存,但也为大量内存泄露、悬空指针等bug埋下隐患。

  因此在现在的高级语言(java、C#等)都采用了垃圾收集机制。

  python也采用了垃圾收集机制,采用引用计算机制为主,标记——清除分代收集两种机制为辅的策略。

一、引用计数机制

  python里每一个东西都是对象,它们的核心就是一个结构体:PyObject。

typedef struct_object {
     int ob_refcnt;
     struct_typeobject *ob_type;
} PyObject;

  PyObject是每个对象必有的内容,其中ob_refcnt就是做为引用计数。当一个对象有新的引用时,它的ob_refcnt就会增加,当引用它的对象被删除,它的ob_refcnt就会减少。

#define Py_INCREF(op)   ((op)->ob_refcnt++)          //增加计数
#define Py_DECREF(op)      \                         //减少计数        
     if (--(op)->ob_refcnt != 0)    \
         ;        \
     else         \
         __Py_Dealloc((PyObject *)(op))

  引用计数为0时,该对象声明就结束了。

1、引用计数机制优点

2、引用计数机制缺点

  转载地址:http://my.oschina.net/hebianxizao/blog/57367?fromerr=KJozamtm

猜你喜欢

转载自www.cnblogs.com/xiugeng/p/10514101.html