java在PC上的速度,兄弟们帮运行一下。
主要测一下java在目前普通PC机上的速度如何。
测的是整数运算和浮点运算。
麻烦注明cpu和内存型号.
程序如下,也可下栽
http://smartlize.vip.sina.com/PO.class
http://smartlize.vip.sina.com/PO.java
public class PO
{
private int[] mint;
private double[] mdouble;
private final int dataType;
private final int size;
public static final int t_int=1;
public static final int t_double=2;
public PO(int dataType,int size)
{
this.dataType=dataType;
this.size=size;
switch(dataType)
{
case t_int:
mint=new int[size];
for(int i=0;i<size;i++)
mint[i]=i*2;
break;
case t_double:
mdouble=new double[size];
for(int i=0;i<size;i++)
mdouble[i]=i*2.1;
break;
}
}
public int getInteger(int index)
{
switch(dataType)
{
case t_int:
return mint[index];
default:
throw new RuntimeException("value is not integer,getInteger isnot applicable.");
}
}
public double getDouble(int index)
{
if(dataType==t_double)
return mdouble[index];
else
throw new RuntimeException("value is not double,getDouble isnot applicable.");
}
public double[] getDoubleArr()
{
return mdouble;
}
public int[] getIntArr()
{
return mint;
}
public static void main(String[] args)
{
int multi=10;
int size=2*1024*1024;
PO poInt=new PO(PO.t_int,size);
PO poDouble=new PO(PO.t_double,size);
long begin=0,end=0;
long rateInt,rateDouble;
System.out.println("hit count:"+size*multi/(1024*1024)+ " M\n");
int tempIntD=0;
int[] arrInt=poInt.getIntArr();
begin=System.currentTimeMillis();
for(int m=0;m<multi;m++)
for(int i=0;i<size;i++)
tempIntD+=arrInt[i];
end=System.currentTimeMillis();
System.out.println("direct Int:"+(end-begin)+" millisecond, speed "+(size*multi/((end-begin)*1024))+ "M/s");
double tempDoubleD=0;
double[] arrDouble=poDouble.getDoubleArr();
begin=System.currentTimeMillis();
for(int m=0;m<multi;m++)
for(int i=0;i<size;i++)
tempDoubleD+=arrDouble[i];
end=System.currentTimeMillis();
System.out.println("Double:"+(end-begin)+" millisecond, speed "+(size*multi/((end-begin)*1024))+ "M/s\n");
int tempInt=0;
begin=System.currentTimeMillis();
for(int m=0;m<multi;m++)
for(int i=0;i<size;i++)
tempInt+=poInt.getInteger(i);
end=System.currentTimeMillis();
System.out.println("Int:"+(end-begin)+" millisecond, speed "+(size*multi/((end-begin)*1024))+ "M/s");
double tempDouble=0;
begin=System.currentTimeMillis();
for(int m=0;m<multi;m++)
for(int i=0;i<size;i++)
tempDouble+=poDouble.getDouble(i);
end=System.currentTimeMillis();
System.out.println("Double:"+(end-begin)+" millisecond, speed "+(size*multi/((end-begin)*1024))+ "M/s\n");
}
}
问题点数:50、回复次数:34Top
1 楼oct14(穿山甲)回复于 2004-12-01 12:52:03 得分 0
我先说我自己的。
cpu:P4 1.6G Mobile
内存:512M ddr266
运行结果:
hit count:20 M
direct Int:130 millisecond, speed 157M/s
Double:410 millisecond, speed 49M/s
Int:782 millisecond, speed 26M/s
Double:410 millisecond, speed 49M/s
Top
2 楼smallnest(公子小巢)回复于 2004-12-01 12:54:50 得分 3
CPU:P4 2.8
neicun1:512M
hit count:20 M
direct Int:78 millisecond, speed 262M
Double:203 millisecond, speed 100M/s
Int:422 millisecond, speed 48M/s
Double:203 millisecond, speed 100M/sTop
3 楼drugon(更高,更远,更强)回复于 2004-12-01 13:05:55 得分 3
---------- 运行Java程序 ----------
P3:667
288 SDRAM
hit count:20 M
direct Int:661 millisecond, speed 30M/s
Double:1022 millisecond, speed 20M/s
Int:1402 millisecond, speed 14M/s
Double:1151 millisecond, speed 17M/s
Top
4 楼123xxx(香克斯)回复于 2004-12-01 13:18:27 得分 3
p4 2.8
512 RAM
hit count:20 M
direct Int:93 millisecond, speed 220M/s
Double:219 millisecond, speed 93M/s
Int:188 millisecond, speed 108M/s
Double:218 millisecond, speed 93M/sTop
5 楼tigeryu(吴越小虎)回复于 2004-12-01 13:38:47 得分 3
Celeron 1G
hit count:20 M
direct Int:661 millisecond, speed 30M/s
Double:561 millisecond, speed 36M/s
Int:1112 millisecond, speed 18M/s
Double:941 millisecond, speed 21M/sTop
6 楼windindance(风舞轻扬·白首为功名)回复于 2004-12-01 13:53:32 得分 2
PIII1.1G 256M
hit count:20 M
direct Int:281 millisecond, speed 72M/s
Double:350 millisecond, speed 58M/s
Int:581 millisecond, speed 35M/s
Double:441 millisecond, speed 46M/sTop
7 楼qiyongjun2003(风也悄悄)回复于 2004-12-01 14:02:58 得分 2
pIII 900 512MB
hit count:20 M
direct Int:631 millisecond, speed 32M/s
Double:1052 millisecond, speed 19M/s
Int:1282 millisecond, speed 15M/s
Double:1121 millisecond, speed 18M/sTop
8 楼launch401(乌兰巴托的夜 那么静 那么静)回复于 2004-12-01 14:14:17 得分 0
抛异常:
hit count:20 M
direct Int:78 millisecond, speed 262M/sException
in thread "main" java.lang.ArithmeticException: / by zero
at PO.main(PO.java(Compiled Code))Top
9 楼awaysrain(绝对零度)(既然选择了远方就要日夜前行)回复于 2004-12-01 14:23:33 得分 2
Celeron 2.4G 256M
direct Int:78 millisecond, speed 262M/s
Double:281 millisecond, speed 72M/s
Int:531 millisecond, speed 38M/s
Double:360 millisecond, speed 56M/sTop
10 楼GoldShield(李柏岑)回复于 2004-12-01 14:30:33 得分 0
偶的居然用不起Top
11 楼zhaohao19853(小人物)回复于 2004-12-01 14:31:51 得分 1
up
Top
12 楼cyck02(QQ)回复于 2004-12-01 14:38:13 得分 2
Celeron 1.1G 192M
hit count:20M
direct Int:719 millisecond, speed 28M/s
Double:1547 millisecond, speed 13M/s
Int:1140 millisecond, speed 17M/s
Double:1422 millisecond, speed 14M/s
再次运行时,数值有变
Top
13 楼d_selenite(计算机的奴隶)回复于 2004-12-01 15:02:28 得分 2
PIII 733/512M
hit count:20 M
direct Int:560 millisecond, speed 36M/s
Double:942 millisecond, speed 21M/s
Int:1261 millisecond, speed 16M/s
Double:852 millisecond, speed 24M/s
==============================================================
另一台Xeon 2G/1G内存
hit count:20 M
direct Int:94 millisecond, speed 217M/s
Double:313 millisecond, speed 65M/s
Int:578 millisecond, speed 35M/s
Double:329 millisecond, speed 62M/s
多运行几次发现结果出入比较大,此测试程序有问题Top
14 楼oct14(穿山甲)回复于 2004-12-01 15:24:32 得分 0
To d_selenite:
由于考虑到jvm缺省分配的heap只有64M,再有一些兄弟的机子内存不是很多,
因此,测试程序只开了24M的数据(int 8M,double 16M),受各种各样缓存的影响较大。
总的来说,第一次运行的结果比较准确。
连续运行有10-30%的偏差可以接受。
兄弟的机子如果性能强劲,比如xeon的机子,可能尝试开240M的数据,既将main中第一行
multi改为1,第二行int size=2*1024*1024;改为int size=20*1024*1024;
这样结果会更稳定。
Top
15 楼sourceid()回复于 2004-12-01 15:38:45 得分 2
Celeron 1.7G ,256M, jdk1.5
hit count:20 M
direct Int:272 millisecond, speed 75M/s
Double:383 millisecond, speed 53M/s
Int:809 millisecond, speed 25M/s
Double:443 millisecond, speed 46M/s
Top
16 楼xl5550(风中的沙)回复于 2004-12-01 16:05:20 得分 3
P4 2.53GHz
512 DDR
hit count:20 M
direct Int:79 millisecond, speed 259M/s
Double:250 millisecond, speed 81M/s
Int:500 millisecond, speed 40M/s
Double:250 millisecond, speed 81M/sTop
17 楼rickyhy(牛耳超人)回复于 2004-12-01 16:55:31 得分 2
P4 1.8GHz
512 DDR
hit count:20 M
direct Int:94 millisecond, speed 217M/s
Double:422 millisecond, speed 48M/s
Int:718 millisecond, speed 28M/s
Double:407 millisecond, speed 50M/sTop
18 楼zhyp178(流星)回复于 2004-12-01 17:34:23 得分 2
P4 2.4GHz
512 DDR
hit count:20 M
direct Int:62 millisecond, speed 330M/s
Double:344 millisecond, speed 59M/s
Int:625 millisecond, speed 32M/s
Double:250 millisecond, speed 81M/s
Top
19 楼oct14(穿山甲)回复于 2004-12-02 10:47:23 得分 0
奇怪,为什么方法调用的整数运算会这么慢?还赶不上双精度运算?(最后两指标)Top
20 楼Karv(Karv)回复于 2004-12-02 11:01:11 得分 2
p4 2.26(2.4G)
ddr 512M
hit count:20 M
direct Int:109 millisecond, speed 187M/s
Double:313 millisecond, speed 65M/s
Int:219 millisecond, speed 93M/s
Double:296 millisecond, speed 69M/sTop
21 楼prcgolf(小鸟)回复于 2004-12-02 11:51:00 得分 1
upTop
22 楼fuwang(古代是many to one,过去是one to one,现在是many to many)回复于 2004-12-02 12:18:22 得分 2
hit count:20 M
direct Int:109 millisecond, speed 18
Double:282 millisecond, speed 72M/s
Int:500 millisecond, speed 40M/s
Double:281 millisecond, speed 72M/sTop
23 楼xue_sharp(只想平凡的生活到老)回复于 2004-12-02 13:01:44 得分 2
PM 1.5G 768M
hit count:20 M
direct Int:100 millisecond, speed 204M/s
Double:161 millisecond, speed 127M/s
Int:460 millisecond, speed 44M/s
Double:181 millisecond, speed 113M/sTop
24 楼zcjl()回复于 2004-12-02 14:28:52 得分 2
Celeron 2.0GHz
504M DDR
----------------------------------------------
hit count:20 M
direct Int:94 millisecond, speed 217M/s
Double:312 millisecond, speed 65M/s
Int:641 millisecond, speed 31M/s
Double:312 millisecond, speed 65M/sTop
25 楼kooris10(kooris10)回复于 2004-12-02 14:38:15 得分 3
hit count:20 M
direct Int:63 millisecond, speed 325M/s
Double:203 millisecond, speed 100M/s
Int:375 millisecond, speed 54M/s
Double:187 millisecond, speed 109M/sTop
26 楼kooris10(kooris10)回复于 2004-12-02 14:39:48 得分 0
补充一下机器配置(着急就忘记了):
P4 3.0G (双内核)
512M DDR400 双通道
Top
27 楼superman421(38度的雪)回复于 2004-12-02 14:42:33 得分 2
Celeron 2.4
512 DDR
----------------------------------
hit count:20 M
direct Int:125 millisecond, speed 163M/s
Double:359 millisecond, speed 57M/s
Int:297 millisecond, speed 68M/s
Double:360 millisecond, speed 56M/sTop
28 楼will52000(正式场合不要再写错别字)回复于 2004-12-02 14:55:06 得分 2
p4 2.26G
512 DDR
----------------------------------
hit count:20 M
direct Int:125 millisecond, speed 256M/s
Double:359 millisecond, speed 72M/s
Int:297 millisecond, speed 37M/s
Double:360 millisecond, speed 78M/s
Top
29 楼lEFTmOON(我的小站(www.ismyway.com))回复于 2004-12-02 15:16:24 得分 2
P4 2.4G/512M DDR 333
-----------------------------------
hit count:20 M
direct Int:79 millisecond, speed 259M/s
Double:250 millisecond, speed 81M/s
Int:484 millisecond, speed 42M/s
Double:250 millisecond, speed 81M/sTop
30 楼kuki84(天道酬勤)回复于 2004-12-02 15:16:46 得分 0
80286
64K
----------------------------------
hit count:20000 H
Top
31 楼will52000(正式场合不要再写错别字)回复于 2004-12-02 15:20:13 得分 0
第二步整数运算比双精度慢的原因是switch语句太耗时间Top
32 楼oct14(穿山甲)回复于 2004-12-02 16:32:05 得分 0
To:will52000
双精度用的也是switch,两都是一样的啊。
另:switch会比if慢吗?我觉行switch的实现可能和hash差不多,应该是O(1),应该比if快吧?Top
33 楼oct14(穿山甲)回复于 2004-12-04 12:18:31 得分 0
看来没人用amd的cpu啊。Top
34 楼zealVampire(白鹤泉)回复于 2004-12-04 16:17:50 得分 0
嘿嘿偶duron的 还是不测好了:) 谁用barton之类的上来show show 撒Top




