内存与垃圾回收机制
内存的概念
内存是计算机中重要的部件之一,它是与CPU进行沟通的桥梁。计算机中所有程序的运行都是在内存中进行的,因此内存的性能对计算机的影响非常大。内存(Memory)也被称为内存储器,其作用是用于暂时存放CPU中的运算数据,以及与硬盘等外部存储器交换的数据。只要计算机在运行中,CPU就会把需要运算的数据调到内存中进行运算,当运算完成后CPU再将结果传送出来,内存的运行也决定了计算机的稳定运行。 内存是由内存芯片、电路板、金手指等部分组成的(来源于百度百科)。
说白了内存就是用来存放CPU的临时运算数据。内存往细了分又有:堆、栈等,任何优秀程序中都有良好内存的划分。
内存溢出
当程序申请内存,但是没有足够的内存分配给申请者时,程序就会停止运行并且报错,这就是程序溢出了。
垃圾回收机制
一、引用计数
Python垃圾回收主要以引用计数为主,分代回收为辅。引用计数法的原理是每个对象维护一个ob_ref,用来记录当前对象被引用的次数,也就是来追踪到底有多少引用指向了这个对象,当发生以下四种情况的时候,该对象的引用计数器+1
1. 对象被创建 a=14
2. 对象被引用 b=a
3. 对象被作为参数,传到函数中 func(a)
4. 对象作为一个元素,存储在容器中 List={a,”a”,”b”,2}
与上述情况相对应,当发生以下四种情况时,该对象的引用计数器-1
1.当该对象的别名被显式销毁时 del a
2.当该对象的引别名被赋予新的对象, a=26
3.一个对象离开它的作用域,例如 func函数执行完毕时,函数里面的局部变量的引用计数器就会减一(但是全局变量不会)
4. 将该元素从容器中删除时,或者容器被销毁时。
当指向该对象的内存的引用计数器为0的时候,该内存将会被Python虚拟机销毁