python之垃圾回收
来源:互联网 发布:淘宝删差评 编辑:程序博客网 时间:2024/06/11 02:29
一、为何要垃圾回收
为避免内存泄露的发生,采用垃圾回收机制。
二、何为内存泄露
内存泄露(memory leak)指由于疏忽或错误使程序未能释放而造成不能在使用的内存的情况。内存泄露并非指内存在物理上消失,而是应用程序分配某段内存后,由于设计失误,失去了对段机制的控制,因而造成了内存的浪费。一般常说的内存泄露是指堆内存的泄露。比如C++中,只new,而不delete。
三、垃圾回收机制有那些方法
引用计数算法:每个对象计算指向它的指针的数量,当有一个指针指向自己时计数值+1,当删除一个指向自己的指针时,计数值-1,如果计数值减为0,说明已经不存在指向该对象的指针了,所以可以安全的被销毁。
标记—清除算法:依赖于对所有存活对象进行一次全局遍历来确定哪些对象可以回收,遍历的过程从根出发,找到所有可达对象,除此之外,其他不可达的对象就是垃圾对象,可被回收。整个过程分为两个阶段:标记阶段找到所有存活对象;清除阶段清楚所有垃圾对象。
标记—缩并算法:为了解决内存碎片问题而产生的一种算法。整个过程可以描述为:标记所有的存活对象;通过重新调整存活对象位置来缩并对象图;更新指向被移动了位置的对象的指针。怎么压缩?压缩算法有,1.任意:移动对象时不考虑它们原来的次序,也不考虑它们之间是否有互相引用的关系。2.线性:尽可能的将原来的对象和它所指向的对象放在相邻的位置上,这样可以达到更好的空间局部性。3.滑动:将对象“滑动”到堆的一端,把存活对象之间的自由单元“挤出去”,从而维持了分配时的原始次序。
节点拷贝算法:把整个堆分成两个半区(from,to),垃圾回收的过程是把存活对象从一个半区from拷贝到另一个半区to的过程,而在下一次回收时,两个半区再互换角色。移动结束后,更新对象的指针引用。
总结:四中垃圾回收算法,后三种也称为跟踪垃圾回收。引用计数算法能够平滑的进行垃圾回收,而不会出现“停止”现象,经常出现于一些实时系统中,但同时它又无法解决环形问题;基于跟踪的垃圾回收机制,在每一次垃圾回收的过程中,要遍历或者复制所有的存活对象,非常耗时间和空间。一般要分情况采用不同的回收算法,或者将几种算法相结合使用。
四、python的垃圾回收机制
python的垃圾回收算法采用引用计数算法。
- python之垃圾回收
- python基础 之 对象销毁(垃圾回收)
- Python垃圾回收之循环引用
- Python的垃圾回收机制(三)之回收机制
- python 垃圾回收
- Python垃圾回收机制
- Python--垃圾回收机制
- python垃圾回收机制
- Python 垃圾回收机制
- Python垃圾回收机制
- python垃圾回收
- python垃圾回收机制
- Python垃圾回收机制
- python垃圾回收机制
- python垃圾回收机制
- [Python]垃圾回收机制
- [译]Python垃圾回收
- Python垃圾回收
- 我对linux理解之alsa
- 数据公钥加密和认证中的私钥公钥
- PHP codeigniter 框架编程学习之【URI路由】
- poj 1050 To the Max(最大子矩阵之和)
- Sql server所有系统表的名称及说明
- python之垃圾回收
- js简单的弹层(带关闭按钮)
- C++运行时错误处理
- uboot中bootargs参数设置
- Android.mk的用法和基础
- MFC 多线程及线程同步
- AS3 SharedObject 存储数组信息
- Linux系统添加“rz”、“sz”命令模块
- 验证码无法显示:java.lang.NoClassDefFoundError: Could not initialize class sun.awt.X11GraphicsEnvironme 解决方案