zoukankan      html  css  js  c++  java
  • 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判断是否内存泄露

  • 相关阅读:
    手指抽搐强迫症 之 APM病理分析器 v0.0.0.3 (11月24日更新)
    [转帖]修改MySql密码及访问限制设置详解
    C#学习笔记
    CodeSmith快速向导
    奇葩的maxscript
    MASM中可以定义的变量类型
    js琐记
    史上最全的css hack(ie69,firefox,chrome,opera,safari)
    逆向win32程序的思路琐记
    makefile伪目标
  • 原文地址:https://www.cnblogs.com/kingshine007/p/11481460.html
Copyright © 2011-2022 走看看