Python内存管理

一、Python内存管理机制

1、引用计数

当一个Python对象被引用时其引用计数增加1,当其不再被一个变量引用时则计数减1.当引用计数等于0时对象被删除。

2、垃圾回收

  • 引用计数
  • 标记清除

  主要解决引用计数循环引用的问题。通过根节点对象(不会被删除的对象)对有向图把所有活动对象打上标记,然后回收没有被标记的非活动对象。

  • 分代回收

  分代回收是建立在标记清除基础上的一种辅助回收容器对象的GC机制。分代回收就根据系统中内存存活时间把它们划分成不同的集合:一共分成三个集合,每个集合称为一个代。 它们的垃圾收集频率随 对象存活存活时间的增大而减小。

3、内存池

用于管理对小块内存的申请和释放。申请小于256字节的内存使用PyObject_Maloc,大于256字节时使用malloc。

二、内存调优

1、手动垃圾回收

2、调高垃圾回收阈值

3、避免循环引用

三、内存泄露及避免

指由于疏忽或错误造成程序未能释放已经不再使用的内存的情况,造成了内存的浪费,导致程序运行速度减慢甚至系统崩溃。

避免措施:

1、不使用对象时,使用del object删除对象的引用计数

2、通过python扩展模块gc查看不能回收对象的信息

3、通过sys.getrefcount(obj)获取对象的引用计数,根据是否为0判断是否内存泄露

原文地址:https://www.cnblogs.com/kingshine007/p/11481460.html