白菜
洞察力+实践 :)


对python的垃圾回收机制的较完整描述 - [Python 垃圾回收 ]

我是个懒人啊,老早就研究过一小点gc,但是一看c语言代码就郁闷了。

今天下午把一直想试试的leo弄下来玩,顺便下下来pythonGC.leo,一会就把整个脉络弄清楚了,leo在阅读复杂代码方面确实不错,其他的好处,挖掘中...,呵呵

http://wiki.woodpecker.org.cn/moin/python_ref_circle_gc



垃圾回收 - [垃圾回收 Python ]

垃圾回收趣史 介绍垃圾回收历史和各种主流算法

Garbage Collection for Python介绍python使用的"轻便式"垃圾回收方法

Sensible Sanitation -- Understanding the IBM Java Garbage Collector 详细讲解Java使用的垃圾回收策略

.net使用的方式貌似和java类似

基本上我对垃圾回收的认识就来自上面几篇文章和一点点对python源码的阅读了.

我最后再稍微总结一下 python为什么使用引用计数法:..........


在学校里面生活没有压力,做事情总是虎头蛇尾,稍微整理一下,放出来再说了。


python中的垃圾回收算法 - [Python 垃圾回收 源码分析 ]

自从java把垃圾回收的概念发扬光大,现在介绍垃圾回收算法的文章已经很多了,这篇文章的目的是想结合python源码分析python实现的GC算法.

简单得说,垃圾回收就是两个步骤:找出垃圾,回收垃圾.回收比较简单,直接free掉就可以.关键在于怎么找到垃圾.

找垃圾的算法有两种,一个是引用计数法,这是python使用的,引用计数法比较好理解,接触过com的人肯定记得他,用一个整数保存当前对内存块引用的数目,找垃圾就只需要找那些引用计数为0的就可以,唯一的缺陷就是著名的引用循环问题,当然python2.0以后解决了这个问题;另一种就是tracing算法了,.net和java使用的都是这个,该算法要求维护固定数目的几个"根","根"保存着对其他内存块的引用,当然普通内存块也可以保存其他内存块的引用,比如容器.这样内存块和之间的引用就构成了一棵树,所有分配的内存块都在这棵树中,删除一个内存块删除对他的引都是有用的,用就可以.找垃圾的时候不是很方便,每次从"根"开始遍历这棵树,能遍历到的剩下的都是垃圾,这个时候如何清除垃圾又有两种选择,详细情况见... 另外generation算法和adaptive算法都是通用的,详细情况也不一一赘述了.

上面说了.net和java都选择tracing算法,为什么python却选择引用计数法呢.我觉得是这样的: tracing算法需要维护一棵或几棵固定的内存树,这样就使得内存必须统一进行分配,而python是个很开放的东西,为了允许用户编写自己的内存分配方式




Page共1页 1
日历

搜索

Tags
>>More

最近更新

最新评论

存档



我的链接

联系我
给我写邮件
有事您q我 最好用gtalk联系yi.codeplayer@gmail.com
点击量
Total: