python的内存管理机制

参考了网上的一些博客,链接如下:

https://www.cnblogs.com/geaozhang/p/7111961.html

这里总结一下python的内存管理机制:

python利用“引用计数”实现一种较为简单的“垃圾回收机制”,且扫描时使用“分代回收”提高扫描效率,且回收站称为“内存池”;

(1)引用计数:

简而言之 ,就是在Python中,每个对象都有指向该对象的引用总数---引用计数,当某个对象的引用计数为0时,我们就可以考虑将其进行垃圾回收了;

(2)垃圾回收机制:

即是对上面的引用计数为0的对象进行回收,当然回收的时候采用了一个分代回收的机制,帮助提高扫描的效率。另外,Python中的垃圾回收不是直接释放掉,而是将其回收到内存池中,以备下次使用;

(3)内存池:

垃圾回收站,相当于一个金字塔结构,如下:

第3层:最上层,用户对Python对象的直接操作

第1层和第2层:内存池,有Python的接口函数PyMem_Malloc实现-----若请求分配的内存在1~256字节之间就使用内存池管理系统进行分配,调用malloc函数分配内存,但是每次只会分配一块大小为256K的大块内存,不会调用free函数释放内存,将该内存块留在内存池中以便下次使用。

第0层:大内存-----若请求分配的内存大于256K,malloc函数分配内存,free函数释放内存。

第-1,-2层:操作系统进行操作

 注意:

python的这种引用计数还有一个问题就是“孤立引用环”的情况,如下:

 

posted @ 2018-11-27 15:32  outthinker  阅读(272)  评论(0编辑  收藏  举报