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的这种引用计数还有一个问题就是“孤立引用环”的情况,如下: