首先Python的垃圾回收机制和Java略有不同:
- python采用引用计数为主,标记-清除(Mark-Sweep)和分代清除为辅的机制,其中标记-清除和分代回收主要是为了处理循环引用的难题。
- java中已经弃用了引用计数,采用可达性分析来收集垃圾,使用结合复制(Copying)算法(新生代)和标记-整理(Mark-Compact)算法(老年代)的分代回收来回收垃圾。
本博文主要分析总结Python的垃圾回收机制,所以这里就不细说java垃圾回收机制了,详情可参见我另一篇博文:Java垃圾回收机制
引用计数算法
- 思想:python中一切皆为对象,对象的核心就是一个结构体PyObject,里面包含引用计数器ob_refcnt,当对象增加一个引用时,ob_refcnt+1;当引用它的对象被删除时,ob_refcnt-1;当引用计数ob_refcnt==0时,对象的生命结束。
- 优点:
- 简单
- 实时性:当某个对象的引用计数为0时,内存马上就会被回收;不像其他需要等待特定的时机来进行垃