为什么在 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编译器,但结果没有不同。