Python内存管理机制

来源:互联网 发布:linux apt-get卸载 编辑:程序博客网 时间:2024/06/10 21:13

    Python有一个自己的私有堆(heap),运行python程序时所需要的所有Python对象和数据类型都保存在这个堆上,只有解释器才有权限去管理这个私有堆,程序员没有管理权限。


    堆空间分配靠python内存管理器来完成。为了有效的利用内存,python使用缓冲池技术来优化管理过程。虚拟机每次申请256KB的大块内存B,然后分成若干个pool(大小为8的整数倍)。对于小于256byte的对象直接从内存池中分配内存(大多数python对象小于256byte),大于256byte的对象直接使用malloc函数从内存中获得。最多可以申请64M的大块内存B,超出64M之后,不管对象是不是大于256byte,都直接从内存中获得。完全不用的B释放然后回收。


    Python默认采用引用计数机制来回收内存。当一个对象的引用计数为零时,存储该对象的内存块就会被标记为空闲,然后就会被free,在被系统回收。但是对于容器型,如list,dict等存在循环引用的问题,此时引用计数不可能为零,默认的引用计数机制就失效了。此时启用GC(Garbage Collection)机制来管理内存的回收的问题,尤其是对于这种循环引用的问题,具体的分析在我的博客中可以找到。


    gc模块可以手动设置GC机制的开启与关闭,gc.enable(), gc.disable()。如果在自定义类中,定义了__del__方法,那么GC机制就对此类对象的循环引用失效了。

0 0
原创粉丝点击