`
idning
  • 浏览: 135464 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

c/java/python性能比较

阅读更多

测试环境: 8核8g内存

 

1. 文件读写测试:

图中横坐标:

2表示2^2M = 4M

13表示2^13M = 8G

 

从上图 可以看出:

     c/java/python在文件读写方面性能差别不是很大,

 

  • 在文件大小>4G的时候,文件读写速度都局限于磁盘IO 速度.
  • 在文件大小<2G的时候,文件读写速度基本上都是文件系统cache影响的速度.

2. 循环测试:

做1073741824 个循环(1G),测试需要的时间,从而计算每种语言每秒运行的循环数:

 

 

java:   643730110

c:         293693059

python: 4683359

 

可以看出,python的循环性能最差.

但是比较奇怪的是java比c好。。。

 

 

 

所有代码见附件

  • 大小: 50.9 KB
分享到:
评论
19 楼 idning 2010-07-01  
murainwood 写道
楼主,编译器优化的程度不同,会带来不同的“假象”
这个网站比较有趣,各种编程语言的性能对比测试

http://shootout.alioth.debian.org/

你可以看一看


这个好,谢谢:)
18 楼 jjcang 2010-07-01  
lz主要是想说明他会3种编程语言
17 楼 murainwood 2010-06-30  
icefishc 写道
mathfox 写道
每次都想看JAVA 性能是不是最差的。

每次都可能看到JAVA性能在测试中不错。

每次都要看到有人骂JAVA性能差。



因为这种测试离实际应用差得太远了

首先是离实际应用很远,其次么...我曾看见生产机上的JVM用Client模式跑JBoss的,Heap也没调整,更别说GC的参数调整。
搞Java的垃圾程序员太多了,没办法。谁让这东西门槛低呢?同理可见高考扩招。
16 楼 murainwood 2010-06-30  
楼主,编译器优化的程度不同,会带来不同的“假象”
这个网站比较有趣,各种编程语言的性能对比测试

http://shootout.alioth.debian.org/

你可以看一看
15 楼 gundumw100 2010-06-30  
除了在游戏方面能比较出来,其他地方都可以忽略不计。
14 楼 dongya1987 2010-06-30  
<div class="quote_title">idning 写道</div>
<div class="quote_div">
<p>测试环境: 8核8g内存</p>
</div>
<p>这个是关键</p>
13 楼 fengzl 2010-06-30  
图不错,用什么生成的
12 楼 pangyi 2010-06-30  
Java的性能在某些方面确实接近于C\C++
11 楼 nakupanda 2010-06-30  
JRE某版本之后JAVA性能似乎就不错了?
10 楼 icefishc 2010-06-29  
mathfox 写道
每次都想看JAVA 性能是不是最差的。

每次都可能看到JAVA性能在测试中不错。

每次都要看到有人骂JAVA性能差。



因为这种测试离实际应用差得太远了
9 楼 mathfox 2010-06-29  
每次都想看JAVA 性能是不是最差的。

每次都可能看到JAVA性能在测试中不错。

每次都要看到有人骂JAVA性能差。


8 楼 superlittlefish 2010-06-29  
没有什么意义.
7 楼 woniu1983 2010-06-29  
同意楼上, 内存也是需要比较的一个方面。

6 楼 jackerxff 2010-06-29  
应该再比较一下消耗的内存大小,Java消耗内存是很大的
5 楼 hareamao 2010-06-29  
又是性能比较……
4 楼 idning 2010-06-29  
关于优化:

给gcc添加了-O2选项, 这时候c语言loop需要的时间变为0.

于是,将main返回值改为 sum:
原来: return 0;
现在: return sum;

这样,c语言和java的1G个循环需要的时间差不多:
引用

cc -O2 -o loop loop.c
./loop 1073741824
0.736
javac Loop.java
java Loop 1073741824
0.869


3 楼 idning 2010-06-29  
docpart 写道
看到你的循环测试结果,就猜想你用了空循环,打开一看,果然如此。

不妨在循环体内增加一个语句,例如while(--i){if(i%2==0)j+=i;},或用一些实际有循环的代码来测试,看看结果如何。

有些编译器可能为了应付一些标准测试而做了特别优化,这些优化可能在实际当中根本毫无用处,以至于测试结果显示性能第一,实际应用人们却感觉慢,往往还以为自己的感觉出了问题。


我修改了测试代码:
    while (loop_cnt-- > 0) {
        sum += loop_cnt;
    }
c和java的差别更大:
c:      287,096,744
java: 1,234,186,004  (每秒1G个循环)



model name	: Intel(R) Xeon(R) CPU           E5420  @ 2.50GHz
stepping	: 6
cpu MHz		: 2493.795

2 楼 docpart 2010-06-28  
看到你的循环测试结果,就猜想你用了空循环,打开一看,果然如此。

不妨在循环体内增加一个语句,例如while(--i){if(i%2==0)j+=i;},或用一些实际有循环的代码来测试,看看结果如何。

有些编译器可能为了应付一些标准测试而做了特别优化,这些优化可能在实际当中根本毫无用处,以至于测试结果显示性能第一,实际应用人们却感觉慢,往往还以为自己的感觉出了问题。
1 楼 mathgl 2010-06-25  
IO基本上都是用同一套底层的api,差别很有限....

相关推荐

Global site tag (gtag.js) - Google Analytics