`
finux
  • 浏览: 202175 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

PyIntObject的对象池技术太可怕了~

阅读更多

最近在读《Python源码剖析》,只是看到PyIntObject的对象池技术而已,根据书中的讲解及源码可知:一旦系统中的某块内存被Python申请用于整数对象,那么这块内存在Python进程结束之前,将永远不会得到释放。

 

这样一句话实在太可怕了,于是做了个小小的实验:

假设sizeof(PyIntObject) = 12byte,那么1GB = 1024 * 1024 * 1024 / 12个PyIntObject,既然如此,试试运行下面的Python语句:

for i in range(1024 * 1024 * 1024 / 12):
	pass

效果怎么样,嘻嘻,机器卡死了吧~

呵呵,再看看你机器的CPU及内存使用情况看看,嘻嘻,没被吓着吧~

 

下面看下我的机器运行的结果:

  • 大小: 93.1 KB
1
0
分享到:
评论
6 楼 finux 2011-01-13  
cnSpirit 写道
我用的是python 3.1,完全没有楼主的问题。。。

Python 3.X应该是不会有该问题的,她连编码的问题应该也不会有吧。
5 楼 cnSpirit 2011-01-13  
我用的是python 3.1,完全没有楼主的问题。。。
4 楼 lzyzizi 2010-07-14  
range()不是这样用的吧,对于你这种情况应该使用xrange,绝对不会卡死。
3 楼 finux 2010-07-04  
jasongreen 写道
x=range(1024*1024*1024/12)
x=None
import gc
gc.collect()

别for了,直接在shell下试试这个。确实很恐怖

呵呵,1G的内存呀~
2 楼 jasongreen 2010-07-04  
x=range(1024*1024*12)
x=range(1024*1024*12)
x=range(1024*1024*12*2)
x=range(1024*1024*12*2)

试试这个,其实也没那么可怕。
1 楼 jasongreen 2010-07-04  
x=range(1024*1024*1024/12)
x=None
import gc
gc.collect()

别for了,直接在shell下试试这个。确实很恐怖

相关推荐

Global site tag (gtag.js) - Google Analytics