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判断是否内存泄露