鱼C论坛

 找回密码
 立即注册
查看: 2944|回复: 4

[技术交流] 【木有百科】垃圾回收机制,你肿么了?(下)

[复制链接]
发表于 2014-9-20 00:15:59 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 mumudontcry 于 2014-9-20 00:27 编辑

上讲的循环列表有以下一些元素:
L[0]=1
L[1][0]=1
L[1][1][0]=1
......如图所示:
注意,从第一个开始数起,就是上面的一串元素!
中间没有L[1],L[1][1]……
是不是很神奇,循环列表?

好,这一讲继续讲垃圾回收机制
还记得垃圾回收机制的两个缺点么?一个是消耗额外的资源,一个是会因为产生循环而回收不了,上一讲说的是第二个,那么咱们这一讲说一说第一个

官方对垃圾回收机制的叙述里,python会触发垃圾回收机制有以下两个条件:
1、用户显式调用gc.collect()
2、每次Python为新对象分配内存时,检查threshold阀值,当对象数量超过threshold设置的阀值就开始进行垃圾回收

以下是别人的一组测试数据,木木引用(读作:chaoxi)下
data =range(1,5000000)
dic=dict(zip(data,data))
作者说用time python test.py运行会得
  • real    0m39.066s  
  • user    0m26.422s  
  • sys     0m12.313s

嗯……这个指令是linux下的指令,win下我试过了不行0 0
然后是把垃圾回收机制关闭之后
import gc
gc.disable()
data=range(1,5000000)
dic=dict(zip(data,data))
gc.enable()
此时,结果是:
  • real    0m2.760s  
  • user    0m1.208s  
  • sys     0m1.532s  

明显加快了许多!
嗯……上面的程序没有看不懂的吧?第一句表示data从1到5000000赋值,第二句表示,把所有的(data,data)放到字典里

也就是说,只要在可能的程序段里,先把垃圾回收机制关闭,然后再开启,就可以加快程序的运行,减少资源消耗

之所以垃圾回收机制不是万能的,所以python才会以“垃圾回收机制为主,标记-清除和分代收集为辅”


关于python里内部的运行机制,有兴趣的鱼油可以参考《Python源码剖析》这本书,在http://so.baiduyun.me/上搜索这本书,有资源下载,因为木木经常习惯性关闭分享链接(强迫症),所以木木就不分享了

……………………………………………………………………………………华丽的分割线………………………………………………
提问时间:
请告诉我,执行了以下程序之后,
a=[1]
a.append(a)
b=a
import sys
a=1
sys.getrefcount(a)
sys.getrefcount(b)
结果是?

************************************************************
关注
木有百科
关注不一样的编程世界


QQ截图20140919234832.jpg
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-9-20 09:08:52 | 显示全部楼层
执行了之后貌似啥都木有。。 360截图20140920090824030.jpg 不过这个b为毛是这个样子的嘞。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-9-22 14:50:16 | 显示全部楼层
wei_Y 发表于 2014-9-20 09:08
执行了之后貌似啥都木有。。不过这个b为毛是这个样子的嘞。。

[...]代表的就是这个列表是个无限循环,如果你在1.5之前的版本里运行这个语句,p会直接崩溃,因为它会无限制打印下去,1.5之后为了防止这种情况出现,用[...]告诉用户,这个是一个循环
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-9-22 15:28:31 | 显示全部楼层
mumudontcry 发表于 2014-9-22 14:50
[...]代表的就是这个列表是个无限循环,如果你在1.5之前的版本里运行这个语句,p会直接崩溃,因为它会无 ...

嗯,python好神奇。啥都表示出来。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-12-30 00:28:56 | 显示全部楼层
神奇。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-6-11 08:11

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表