python的内存管理机制和调优手段
内存管理机制
引用计数、垃圾回收、内存池
引用计数
引用计数是一种非常高效的内存管理手段,当一个python对象被引用时,其引用计数加1,当其不再被一个变量引用时则引用计数减1,当引用计数等于0时对象被删除。
1. 引用计数
引用计数是一种垃圾收集机制,而且是一种最直观,最简单的垃圾收集技术。当python的某一个引用计数降为0时,说明没有任何引用指向该对象,该对象就成为要被回收的垃圾了。比如,某个新建对象,他被分配给某个引用,对象的引用计数为1。如果引用被删除,对象的引用计数为0,那么该对象就可以被垃圾回收。不过如果出现循环引用的话,引用计数机制就不再起有效的作用了。
2. 标记清除
如果两个对象的引用计数都为1,但是仅仅存在他们之间的循环引用,那么则两个对象都是需要被回收的,也就是说,他们的引用计数虽然表现为非0,但实际上有效的引用计数为0.所以先将循环引用摘掉,就会得出两个对象的有效计数。
3. 分代回收
从前面“标记-清除”这样的垃圾收集机制来看,这种垃圾收集机制所带来的额外操作实际上与系统中总的内存块的数量时相关的,当需要回收的内存块越多时,垃圾检测带来的额外操作就越多,而垃圾回收所带来的额外操作就越少;反之,当需要回收的内存块越少时,垃圾检测就将比垃圾回收带来更少的额外操作。
4.调优手段
- 手动垃圾回收
- 调高垃圾回收阀值
- 避免循环引用(手动解循环引用和使用若引用)