Python的垃圾回收机制

Python的垃圾回收机制有两种(也可以说一种:叫引用计数): 一是引用计数, 二是隔代回收.

  1. 引用计数

引用计数原理: 当数据的引用数变成0的时候,python解释器就认为这个数据是垃圾,进行垃圾回收,释放空间.

 

  1. 分代回收

分代回收是用来解决交叉引用(循环引用),并增加数据回收的效率. 原理: 通过对象存在的时间不同,采用不同的算法来 回收垃圾. 形象的比喻, 三个链表,零代链表上的对象(新创建的对象都加入到零代链表),引用数都是一,每增加一个指针,引用加一,随后python会检测列表中的互相引用的对象,根据规则减掉其引用计数. GC算法对链表一的引用减一,引用为0的,清除,不为0的到链表二,链表二也执行GC算法,链表三一样. 存在时间越长的数据,越是有用的数据.

 

 

标记清除

为什么python没有标记清除机制,

    因为python的标记就是引用数,是模仿Ruby的标记清除机制,为什么Ruby要用标记清除机制,因为Ruby在代码开始执行之前就已经创建了成百上千个对象,对有指针的对象进行标记(这个标记是Ruby解释器制作的),没有指针的对象进行清除,并送回可用列表中,从而节约计算机资源.

标记清除是Ruby的垃圾回收机制,标记(通过M标记)可达的数据, 会清除不带M标记的数据.

 

Ruby使用链表追踪未使用的对象, python的分代回收使用链表追踪使用的对象

原文地址:https://www.cnblogs.com/ppansj/p/7966785.html