一、垃圾回收
1 python是一门动态语言,在声明变量时不需要定义变量的类型,可以直接对它进行赋值,对象的类型和内存都是在运行时确定的;
2 当内存中有不再使用的部分时,垃圾收集器就会把他们清理掉;即对象的引用计数为0时会被清除;
3 垃圾回收机制中的循环垃圾回收器,确保释放循环引用对象。
二、内存池机制
1 python的内存池机制是以金字塔形式存在,-1、-2层主要由操作系统进行操作;
2 第0层主要由C中的malloc、free等内存分配和释放函数进行操作;
3 第1、2层是python的内存池,由python的接口函数PyMem_Malloc实现,主要分配小于256K的内存;
4 第3层是最上层,也就是我们对python对象的直接操作;
5 当需要的内存大于256K时,就会调用C的malloc来分配内存,每次分配一块256K的内存,经过内存池登记的内存,最后还是会回收到内存池,供下次使用。
三、引用计数
类似于windows内核对象的方式管理内存。每一个对象,都维护着指向该对象的引用计数。
引用计数增加:
1 对象被创建:x = 1;
2 对象被引用:y = x;
3 被作为参数传递给函数:foo(x);
4 作为容器对象的一个元素:a = [1,x,'aa'];
引用计数减少:
1 本地引用离开作用域:函数foo(x)结束;
2 对象被销毁:del x;
3 对象被赋值给其他对象:x = 33;