论坛首页 入门技术论坛

c/java/python性能比较

浏览 20796 次
该帖已经被评为新手帖
作者 正文
   发表时间:2010-06-25   最后修改:2010-06-29

测试环境: 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
   发表时间:2010-06-25  
IO基本上都是用同一套底层的api,差别很有限....
0 请登录后投票
   发表时间:2010-06-28  
看到你的循环测试结果,就猜想你用了空循环,打开一看,果然如此。

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

有些编译器可能为了应付一些标准测试而做了特别优化,这些优化可能在实际当中根本毫无用处,以至于测试结果显示性能第一,实际应用人们却感觉慢,往往还以为自己的感觉出了问题。
0 请登录后投票
   发表时间: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

0 请登录后投票
   发表时间: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


0 请登录后投票
   发表时间:2010-06-29  
又是性能比较……
0 请登录后投票
   发表时间:2010-06-29  
应该再比较一下消耗的内存大小,Java消耗内存是很大的
0 请登录后投票
   发表时间:2010-06-29  
同意楼上, 内存也是需要比较的一个方面。

0 请登录后投票
   发表时间:2010-06-29  
没有什么意义.
0 请登录后投票
   发表时间:2010-06-29  
每次都想看JAVA 性能是不是最差的。

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

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


0 请登录后投票
论坛首页 入门技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics