为什么在 Raspberry pi 上 Open 和 Oracle JDK 之间存在如此大的性能差异?
在我的Raspberry上,我用两个JVM做了一些性能测试,如CaffeineMark和SciMark。即使我听说差异非常小,它们之间也存在巨大的性能差异。我还尝试使用浮点数进行计算,并且Oracle JDK获得了更好的分数,即使两者都应该支持硬浮点abi。
我用作操作系统。Linux raspberrypi 3.18.11-v7+
OpenJDK:
java version "1.7.0_79"
OpenJDK Runtime Environment (IcedTea 2.5.5) (7u79-2.5.5-1~deb7u1+rpi1)
OpenJDK Zero VM (build 24.79-b02, mixed mode)
OracleJDK:
java version "1.7.0_40"
Java(TM) SE Runtime Environment (build 1.7.0_40-b43)
Java HotSpot(TM) Client VM (build 24.0-b56, mixed mode)
SciMark results:
OpenJDK OracleJDK
Composite Score 14.280735577363213 || 32.24948180361924
FFT (1024) 9.482866845055302 || 26.447121360843663
SOR (100x100) 27.14938943220646 || 59.68022533004399
Monte Carlo 3.6298604956147384 || 10.561671865446971
Sparse matmult 15.603809523809524 || 26.64931580928407
LU (100x100) 15.53775159013005 || 37.90907465247749
我使用了一个程序,该程序将浮点数以0.1步计算为600000。我试图测试JVM在处理浮点数上的性能。
OpenJDK: 257ms
OracleJDK: 151ms
0.1 到 1200000 的步骤:
OpenJDK: 457ms
OracleJDK: 263ms
public class Testing {
/**
* @param args
*/
public static long Test()
{
float counter=0.0f;
long startTime = System.currentTimeMillis();
while (counter <= 1_200_000.0f)
{
counter += 0.1f;
}
return System.currentTimeMillis() - startTime;
}
public static void main(String[] args){
System.out.println(Test());
}
}
我尝试了SlipperySeal中提到的增强功能,并将测试放在循环中。我也尝试使用c2编译器,但结果没有不同。