红联Linux门户
Linux帮助

linux下java与c速度测试比较(JAVA胜出)

发布时间:2008-07-21 10:45:37来源:红联作者:Olcevt
都说c执行速度比java快,但我的测试确相反,是java执行速度提高了?

测试环境如下:

引用:
[lyb@lyb-centos5 Desktop]$ uname -a
Linux lyb-centos5 2.6.18-92.1.6.el5 #1 SMP Wed Jun 25 13:49:24 EDT 2008 i686 i686 i386 GNU/Linux
[lyb@lyb-centos5 Desktop]$ java -version
java version "1.6.0_06"
Java(TM) SE Runtime Environment (build 1.6.0_06-b02)
Java HotSpot(TM) Client VM (build 10.0-b22, mixed mode, sharing)
[lyb@lyb-centos5 Desktop]$ cc --version
cc (GCC) 4.1.2 20071124 (Red Hat 4.1.2-42)
Copyright (C) 2006 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.


测试程序C:

引用:
cT.c
#include
#include
int main ()
{
int i;
int j=9;
for(i=1000000000;i>0;i--)
{
j=i;
}
printf("value %d",j);
}


测试程序JAVA:

引用:
jT.java
public class jT{
public static void main(String [] args){
int i;
int j=9;
for(i=1000000000;i>0;i--){
j=i;
}
System.out.println("value "+j);
}
}


编译与执行:

引用:
[lyb@lyb-centos5 Desktop]$ cc -o cT cT.c
[lyb@lyb-centos5 Desktop]$ javac jT.java
[lyb@lyb-centos5 Desktop]$ time cT
value 1
real 0m4.738s
user 0m4.341s
sys 0m0.030s
[lyb@lyb-centos5 Desktop]$ time java jT
value 1

real 0m3.451s
user 0m3.242s
sys 0m0.040s
[lyb@lyb-centos5 Desktop]$ time cT
value 1
real 0m6.908s
user 0m6.532s
sys 0m0.056s
[lyb@lyb-centos5 Desktop]$ time java jT
value 1

real 0m3.361s
user 0m3.159s
sys 0m0.041s
[lyb@lyb-centos5 Desktop]$ time java jT
value 1

real 0m3.346s
user 0m3.154s
sys 0m0.041s
[lyb@lyb-centos5 Desktop]$ time cT
value 1
real 0m6.995s
user 0m6.672s
sys 0m0.067s
[lyb@lyb-centos5 Desktop]$ time java -server jT
value 1

real 0m0.862s
user 0m0.342s
sys 0m0.044s
[lyb@lyb-centos5 Desktop]$ time java -server jT
value 1

real 0m0.273s
user 0m0.176s
sys 0m0.021s


结果:从上面的执行情况看,java明显胜出,如果java打开-server选项,速度更是有质的提升。
文章评论

共有 5 条评论

  1. Unfeel 于 2008-08-29 21:26:56发表:

    我们学JAVA的不懂C,就被人看不起
    不过C的确是强大,JAVA没得比~

  2. kevinx 于 2008-07-21 21:12:52发表:

    现在的java能把你那条笨地不能再笨的java循环变成本地的代码并进行优化。所以你这两段代码实际上是c与c的比较。你是用几条复杂的语句试试,在来几个函数调用,测试一下链表效率...
    实际上如果你把jcc的优化开到最高,你会发现上面的c代码会又优化成
    printf("value %d",1);
    执行时间是常量

  3. kevinx 于 2008-07-21 21:07:59发表:

    很生气:)
    为了表明自己的生气,我注册了
    楼主的测试太“可爱”了
    如果你好歹看过点JVM规范、知道点虚拟机实现手段的话,根本就不会去做这个试验
    我怎么有点心痛?因为中国程序员的浮躁?

  4. qquchn 于 2008-07-21 16:08:38发表:

    好歹也弄个+=吧 你这个程序结果就是0 另外你把输出语句放到循环里面 看看哪个快

  5. qquchn 于 2008-07-21 16:06:13发表:

    这算啥执行效率,你让它们找素数(开方运算)或者做矩阵运算,你看看哪个快。
    赋值运算……亏你想的出来。程序里面只有赋值么?
    Java在虚拟机里运行,效率绝对比不上C(它可以嵌入汇编代码的,Java就更别想了)
    Java的问题不只是效率,还有过于臃肿