测试环境如下:
引用:[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选项,速度更是有质的提升。
Unfeel 于 2008-08-29 21:26:56发表:
我们学JAVA的不懂C,就被人看不起
不过C的确是强大,JAVA没得比~
kevinx 于 2008-07-21 21:12:52发表:
现在的java能把你那条笨地不能再笨的java循环变成本地的代码并进行优化。所以你这两段代码实际上是c与c的比较。你是用几条复杂的语句试试,在来几个函数调用,测试一下链表效率...
实际上如果你把jcc的优化开到最高,你会发现上面的c代码会又优化成
printf("value %d",1);
执行时间是常量
kevinx 于 2008-07-21 21:07:59发表:
很生气:)
为了表明自己的生气,我注册了
楼主的测试太“可爱”了
如果你好歹看过点JVM规范、知道点虚拟机实现手段的话,根本就不会去做这个试验
我怎么有点心痛?因为中国程序员的浮躁?
qquchn 于 2008-07-21 16:08:38发表:
好歹也弄个+=吧 你这个程序结果就是0 另外你把输出语句放到循环里面 看看哪个快
qquchn 于 2008-07-21 16:06:13发表:
这算啥执行效率,你让它们找素数(开方运算)或者做矩阵运算,你看看哪个快。
赋值运算……亏你想的出来。程序里面只有赋值么?
Java在虚拟机里运行,效率绝对比不上C(它可以嵌入汇编代码的,Java就更别想了)
Java的问题不只是效率,还有过于臃肿