zoukankan      html  css  js  c++  java
  • Python 是如何进行内存管理的?python 的程序会内存泄露吗?说说有没有什么方面防止或检测内存泄露?

    Python GC主要使用 引用计数 来跟踪和回收垃圾。在引用计数的基础上,通过“标记-清除”解决容器对象可能产生的循环引用问题。通过分代
    以空间换时间的方法提高垃圾回收效率
    
        引用计数: 每个对象中都有ob-refcnt来做引用计数。当一个对象...,ob-refcnt就会增加,当引用的对象删除,那么ob-refcnt就会减少当ob-refcnt为零,就会释放该对象的内存空间
        标记清除: 解决循环引用的问题。先按需分配,等到没有空闲内存的时候,从寄存器和程序栈上的引用出发,遍历所有对象和引用把所有能访问的打标记,最后将没有标记的对象释放掉
        分代技术: 提高效率,提高垃圾回收的效率,按照存活时间,分成不同的集合。将内存块按照其存活时间划分为不同的集合。每个集合就称为一个“代”,垃圾回收的频率随代的存活时间增大而减小。Python默认定义分代对象集合,引用数越大,对象的存活时间越长
    
    Python也会内存泄露,Python本身的垃圾回收机制无法回收重写了del的循环引用的对象.
    
        程序员管理好每个python对象的引用,尽量在不需要使用对象的时候,断开所有引用
        尽量少通过循环引用组织数据,可以改用weakref做弱引用或者用id之类的句柄访问对象
        通过gc模块的接口可以检查出每次垃圾回收有哪些对象不能自动处理,再逐个逐个处理
  • 相关阅读:
    nginx&http 第二章 ngx 事件event处理 数据结构
    nginx&http 第二章 ngx启动多进程
    PF_PACKET抓包mmap
    PF_PACKET&&tcpdump
    tcpack--3快速确认模式- ack状态发送&清除
    tcpack---1简述
    tcpack--3快速确认模式
    tcpack--4延时ack
    linux tcp Nagle算法,TCP_NODELAY和TCP_CORK 转载
    tcpack----- 2sack dack
  • 原文地址:https://www.cnblogs.com/one-tom/p/11662069.html
Copyright © 2011-2022 走看看